Merged in feature/service-accounts-1 (pull request #227)
Support for service accounts with static credentials * feature complete * tests and docs * lint fix
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
-- 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;
|
||||
Reference in New Issue
Block a user