451da3d26d
Support for service accounts with static credentials * feature complete * tests and docs * lint fix
145 lines
4.0 KiB
SQL
145 lines
4.0 KiB
SQL
-- Schema Inventory Query
|
|
-- Outputs sorted lists of all schema objects for comparison
|
|
-- Used to verify migration collapse produces identical schema
|
|
|
|
\echo '=== TABLES ==='
|
|
SELECT table_name, column_name, data_type, is_nullable, column_default
|
|
FROM information_schema.columns
|
|
WHERE table_schema = 'public'
|
|
ORDER BY table_name, ordinal_position;
|
|
|
|
\echo '=== PRIMARY KEYS ==='
|
|
SELECT tc.table_name, kcu.column_name
|
|
FROM information_schema.table_constraints tc
|
|
JOIN information_schema.key_column_usage kcu
|
|
ON tc.constraint_name = kcu.constraint_name
|
|
AND tc.table_schema = kcu.table_schema
|
|
WHERE tc.constraint_type = 'PRIMARY KEY'
|
|
AND tc.table_schema = 'public'
|
|
ORDER BY tc.table_name, kcu.ordinal_position;
|
|
|
|
\echo '=== FOREIGN KEYS ==='
|
|
SELECT
|
|
tc.table_name,
|
|
kcu.column_name,
|
|
ccu.table_name AS foreign_table,
|
|
ccu.column_name AS foreign_column
|
|
FROM information_schema.table_constraints tc
|
|
JOIN information_schema.key_column_usage kcu
|
|
ON tc.constraint_name = kcu.constraint_name
|
|
AND tc.table_schema = kcu.table_schema
|
|
JOIN information_schema.constraint_column_usage ccu
|
|
ON tc.constraint_name = ccu.constraint_name
|
|
AND tc.table_schema = ccu.table_schema
|
|
WHERE tc.constraint_type = 'FOREIGN KEY'
|
|
AND tc.table_schema = 'public'
|
|
ORDER BY tc.table_name, kcu.column_name;
|
|
|
|
\echo '=== INDEXES ==='
|
|
SELECT
|
|
tablename,
|
|
indexname,
|
|
indexdef
|
|
FROM pg_indexes
|
|
WHERE schemaname = 'public'
|
|
ORDER BY tablename, indexname;
|
|
|
|
\echo '=== CHECK CONSTRAINTS ==='
|
|
SELECT
|
|
tc.table_name,
|
|
tc.constraint_name,
|
|
cc.check_clause
|
|
FROM information_schema.table_constraints tc
|
|
JOIN information_schema.check_constraints cc
|
|
ON tc.constraint_name = cc.constraint_name
|
|
AND tc.constraint_schema = cc.constraint_schema
|
|
WHERE tc.constraint_type = 'CHECK'
|
|
AND tc.table_schema = 'public'
|
|
AND tc.constraint_name NOT LIKE '%_not_null'
|
|
ORDER BY tc.table_name, tc.constraint_name;
|
|
|
|
\echo '=== UNIQUE CONSTRAINTS ==='
|
|
SELECT
|
|
tc.table_name,
|
|
tc.constraint_name,
|
|
STRING_AGG(kcu.column_name, ', ' ORDER BY kcu.ordinal_position) as columns
|
|
FROM information_schema.table_constraints tc
|
|
JOIN information_schema.key_column_usage kcu
|
|
ON tc.constraint_name = kcu.constraint_name
|
|
AND tc.table_schema = kcu.table_schema
|
|
WHERE tc.constraint_type = 'UNIQUE'
|
|
AND tc.table_schema = 'public'
|
|
GROUP BY tc.table_name, tc.constraint_name
|
|
ORDER BY tc.table_name, tc.constraint_name;
|
|
|
|
\echo '=== VIEWS ==='
|
|
SELECT table_name, view_definition
|
|
FROM information_schema.views
|
|
WHERE table_schema = 'public'
|
|
ORDER BY table_name;
|
|
|
|
\echo '=== FUNCTIONS ==='
|
|
SELECT
|
|
routine_name,
|
|
routine_type,
|
|
data_type as return_type
|
|
FROM information_schema.routines
|
|
WHERE routine_schema = 'public'
|
|
ORDER BY routine_name;
|
|
|
|
\echo '=== TRIGGERS ==='
|
|
SELECT
|
|
trigger_name,
|
|
event_object_table,
|
|
action_timing,
|
|
event_manipulation,
|
|
action_statement
|
|
FROM information_schema.triggers
|
|
WHERE trigger_schema = 'public'
|
|
ORDER BY event_object_table, trigger_name;
|
|
|
|
\echo '=== ENUM TYPES ==='
|
|
SELECT
|
|
t.typname as enum_name,
|
|
STRING_AGG(e.enumlabel, ', ' ORDER BY e.enumsortorder) as enum_values
|
|
FROM pg_type t
|
|
JOIN pg_enum e ON t.oid = e.enumtypid
|
|
JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
|
|
WHERE n.nspname = 'public'
|
|
GROUP BY t.typname
|
|
ORDER BY t.typname;
|
|
|
|
\echo '=== DOMAINS ==='
|
|
SELECT
|
|
domain_name,
|
|
data_type,
|
|
domain_default,
|
|
character_maximum_length
|
|
FROM information_schema.domains
|
|
WHERE domain_schema = 'public'
|
|
ORDER BY domain_name;
|
|
|
|
\echo '=== TABLE COMMENTS ==='
|
|
SELECT
|
|
c.relname as table_name,
|
|
d.description
|
|
FROM pg_class c
|
|
JOIN pg_description d ON c.oid = d.objoid AND d.objsubid = 0
|
|
JOIN pg_namespace n ON c.relnamespace = n.oid
|
|
WHERE n.nspname = 'public'
|
|
AND c.relkind = 'r'
|
|
ORDER BY c.relname;
|
|
|
|
\echo '=== COLUMN COMMENTS ==='
|
|
SELECT
|
|
c.relname as table_name,
|
|
a.attname as column_name,
|
|
d.description
|
|
FROM pg_class c
|
|
JOIN pg_attribute a ON c.oid = a.attrelid
|
|
JOIN pg_description d ON c.oid = d.objoid AND a.attnum = d.objsubid
|
|
JOIN pg_namespace n ON c.relnamespace = n.oid
|
|
WHERE n.nspname = 'public'
|
|
AND a.attnum > 0
|
|
ORDER BY c.relname, a.attnum;
|