first commit
This commit is contained in:
66
scripts/verify_schema.sql
Normal file
66
scripts/verify_schema.sql
Normal file
@@ -0,0 +1,66 @@
|
||||
-- Reports what actually exists in the application schema.
|
||||
-- Read-only. Uses information_schema and pg_indexes, both standard views;
|
||||
-- no system catalog is written and no object is modified.
|
||||
|
||||
\echo '── Applied migration ─────────────────────────────────────────────────'
|
||||
SELECT version, dirty FROM schema_migrations;
|
||||
|
||||
\echo ''
|
||||
\echo '── Tables in the application schema ──────────────────────────────────'
|
||||
SELECT table_name
|
||||
FROM information_schema.tables
|
||||
WHERE table_schema = current_schema() AND table_type = 'BASE TABLE'
|
||||
AND table_name <> 'schema_migrations'
|
||||
ORDER BY table_name;
|
||||
|
||||
\echo ''
|
||||
\echo '── Enum types and their values ───────────────────────────────────────'
|
||||
SELECT t.typname AS enum_type,
|
||||
string_agg(e.enumlabel, ', ' ORDER BY e.enumsortorder) AS values
|
||||
FROM pg_type t
|
||||
JOIN pg_enum e ON e.enumtypid = t.oid
|
||||
JOIN pg_namespace n ON n.oid = t.typnamespace
|
||||
WHERE n.nspname = current_schema()
|
||||
GROUP BY t.typname
|
||||
ORDER BY t.typname;
|
||||
|
||||
\echo ''
|
||||
\echo '── Constraint counts by type ─────────────────────────────────────────'
|
||||
SELECT CASE contype
|
||||
WHEN 'p' THEN 'primary key'
|
||||
WHEN 'f' THEN 'foreign key'
|
||||
WHEN 'u' THEN 'unique'
|
||||
WHEN 'c' THEN 'check'
|
||||
END AS constraint_type,
|
||||
count(*) AS total
|
||||
FROM pg_constraint c
|
||||
JOIN pg_namespace n ON n.oid = c.connamespace
|
||||
WHERE n.nspname = current_schema() AND contype IN ('p','f','u','c')
|
||||
GROUP BY contype
|
||||
ORDER BY contype;
|
||||
|
||||
\echo ''
|
||||
\echo '── Foreign keys ──────────────────────────────────────────────────────'
|
||||
SELECT conrelid::regclass::text AS child,
|
||||
confrelid::regclass::text AS parent,
|
||||
conname AS constraint_name
|
||||
FROM pg_constraint c
|
||||
JOIN pg_namespace n ON n.oid = c.connamespace
|
||||
WHERE n.nspname = current_schema() AND contype = 'f'
|
||||
ORDER BY child, parent, conname;
|
||||
|
||||
\echo ''
|
||||
\echo '── Indexes ───────────────────────────────────────────────────────────'
|
||||
SELECT tablename, indexname
|
||||
FROM pg_indexes
|
||||
WHERE schemaname = current_schema() AND tablename <> 'schema_migrations'
|
||||
ORDER BY tablename, indexname;
|
||||
|
||||
\echo ''
|
||||
\echo '── Objects outside the application schema created by this migration ──'
|
||||
\echo '(expected: zero rows)'
|
||||
SELECT n.nspname AS schema, c.relname AS object
|
||||
FROM pg_class c
|
||||
JOIN pg_namespace n ON n.oid = c.relnamespace
|
||||
WHERE n.nspname NOT IN ('pg_catalog','information_schema','pg_toast', current_schema())
|
||||
AND c.relkind IN ('r','i','S');
|
||||
Reference in New Issue
Block a user