Last active
December 5, 2024 02:58
-
-
Save gullevek/165ab6114da3ec56432229de5f75a0d5 to your computer and use it in GitHub Desktop.
Read all tables and columns that have some a/i attribute as index, serial, identity
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CREATE OR REPLACE VIEW identity_column_status AS | |
WITH table_data AS ( | |
SELECT | |
t.table_catalog, t.table_schema, t.table_name, | |
t.table_schema || '.' || t.table_name AS schema_table_name | |
FROM | |
information_schema.tables AS t | |
WHERE | |
t.table_type = 'BASE TABLE' | |
AND t.table_schema NOT IN ('information_schema', 'pg_catalog') | |
) | |
SELECT | |
t.table_catalog, t.table_schema, t.table_name, t.schema_table_name, | |
c.column_name, c.column_default, c.data_type, | |
tc_ccu.constraint_name, tc_ccu.constraint_type, | |
dep.deptype, | |
CASE | |
WHEN dep.deptype = 'a' AND c.column_default IS NULL THEN 'INDEX' | |
WHEN dep.deptype = 'a' AND c.column_default IS NOT NULL THEN 'SERIAL' | |
WHEN Dep.deptype = 'i' THEN 'IDENTITY' | |
ELSE 'UNKNOWN' | |
END::VARCHAR AS column_setting | |
FROM | |
table_data AS t, | |
information_schema.columns AS c | |
LEFT JOIN ( | |
SELECT | |
ccu.table_catalog, ccu.table_schema, ccu.table_name, ccu.column_name, | |
ccu.constraint_catalog, ccu.constraint_schema, ccu.constraint_name, | |
tc.constraint_type | |
FROM | |
table_data AS t, | |
information_schema.table_constraints AS tc, | |
information_schema.constraint_column_usage ccu | |
WHERE | |
t.table_name = tc.table_name | |
AND tc.constraint_type <> 'FOREIGN KEY' | |
AND tc.constraint_catalog = ccu.constraint_catalog | |
AND tc.constraint_schema = ccu.constraint_schema | |
AND tc.constraint_name = ccu.constraint_name | |
) AS tc_ccu ON ( | |
tc_ccu.table_catalog = c.table_catalog | |
AND tc_ccu.table_schema = c.table_schema | |
AND tc_ccu.table_name = c.table_name | |
AND tc_ccu.column_name = c.column_name | |
), | |
pg_depend AS dep | |
WHERE | |
t.table_catalog = c.table_catalog | |
AND t.table_schema = c.table_schema | |
AND t.table_name = c.table_name | |
AND dep.classid = 'pg_class'::regclass::oid AND dep.refobjid = ( | |
SELECT oid FROM pg_class WHERE relnamespace = ( | |
SELECT oid FROM pg_namespace WHERE nspname = t.table_schema | |
) AND relname = t.table_name | |
) AND dep.refobjsubid = ( | |
SELECT attnum FROM pg_attribute WHERE attrelid = ( | |
SELECT oid FROM pg_class WHERE relnamespace = ( | |
SELECT oid FROM pg_namespace WHERE nspname = t.table_schema | |
) AND relname = t.table_name | |
) AND attname = c.column_name::name | |
) | |
AND dep.objsubid = 0 | |
ORDER BY | |
t.table_catalog, t.table_schema, t.table_name, c.column_name | |
; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment