Print all tables and Column Names
SELECT
c.table_name,
c.column_name,
c.data_type,
c.is_nullable,
COALESCE(s.n_live_tup, 0) AS estimated_rows
FROM information_schema.columns c
LEFT JOIN pg_stat_user_tables s
ON s.relname = c.table_name
AND s.schemaname = c.table_schema
WHERE c.table_schema = 'public'
ORDER BY c.table_name, c.ordinal_position;
Constraints (PK, FK, UNIQUE, CHECK)
SELECT
tc.table_name,
tc.constraint_type,
tc.constraint_name,
string_agg(kcu.column_name, ', ' ORDER BY kcu.ordinal_position) AS columns
FROM information_schema.table_constraints tc
LEFT JOIN information_schema.key_column_usage kcu
ON tc.constraint_name = kcu.constraint_name
AND tc.table_schema = kcu.table_schema
WHERE tc.table_schema = 'public'
GROUP BY
tc.table_name,
tc.constraint_type,
tc.constraint_name
ORDER BY
tc.table_name,
tc.constraint_type,
tc.constraint_name;
Indexes
SELECT
t.relname AS table_name,
i.relname AS index_name,
CASE
WHEN ix.indisprimary THEN 'PRIMARY KEY'
WHEN ix.indisunique THEN 'UNIQUE'
ELSE 'INDEX'
END AS index_type,
string_agg(a.attname, ', ' ORDER BY x.ordinality) AS columns
FROM pg_class t
JOIN pg_namespace n
ON n.oid = t.relnamespace
JOIN pg_index ix
ON ix.indrelid = t.oid
JOIN pg_class i
ON i.oid = ix.indexrelid
JOIN LATERAL unnest(ix.indkey) WITH ORDINALITY AS x(attnum, ordinality)
ON TRUE
JOIN pg_attribute a
ON a.attrelid = t.oid
AND a.attnum = x.attnum
WHERE n.nspname = 'public'
GROUP BY
t.relname,
i.relname,
ix.indisprimary,
ix.indisunique
ORDER BY
t.relname,
index_type DESC,
index_name;
Foreign Key Relationship
SELECT
tc.table_name,
kcu.column_name,
ccu.table_name AS referenced_table,
ccu.column_name AS referenced_column
FROM information_schema.table_constraints tc
JOIN information_schema.key_column_usage kcu
ON tc.constraint_name = kcu.constraint_name
JOIN information_schema.constraint_column_usage ccu
ON tc.constraint_name = ccu.constraint_name
WHERE tc.constraint_type = 'FOREIGN KEY'
AND tc.table_schema = 'public'
ORDER BY tc.table_name, kcu.column_name;
Rls Policy
SELECT
schemaname,
tablename,
policyname,
permissive,
roles,
cmd,
qual,
with_check
FROM pg_policies
WHERE schemaname = 'public'
ORDER BY tablename, policyname;
Extensions
SELECT
extname,
extversion
FROM pg_extension
ORDER BY extname;
Functions
SELECT
routine_name,
routine_type,
data_type
FROM information_schema.routines
WHERE specific_schema = 'public'
ORDER BY routine_name;
Views
SELECT
table_name
FROM information_schema.views
WHERE table_schema = 'public'
ORDER BY table_name;
Enum Values
SELECT
t.typname AS enum_name,
e.enumsortorder,
e.enumlabel
FROM pg_type t
JOIN pg_enum e
ON t.oid = e.enumtypid
JOIN pg_namespace n
ON n.oid = t.typnamespace
WHERE n.nspname = 'public'
ORDER BY enum_name, e.enumsortorder;