Created
January 11, 2025 20:56
-
-
Save 0xBigBoss/b805f473454d38ffa9012184b65d36b8 to your computer and use it in GitHub Desktop.
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
-- Find indexes on the table | |
SELECT indexname, tablename | |
FROM pg_indexes | |
WHERE tablename = '' || ${table_name} || ''; | |
-- Find foreign key relationships | |
SELECT | |
tc.table_schema, | |
tc.constraint_name, | |
tc.table_name, | |
kcu.column_name, | |
ccu.table_schema AS foreign_table_schema, | |
ccu.table_name AS foreign_table_name, | |
ccu.column_name AS foreign_column_name | |
FROM | |
information_schema.table_constraints AS tc | |
JOIN information_schema.key_column_usage AS kcu | |
ON tc.constraint_name = kcu.constraint_name | |
AND tc.table_schema = kcu.table_schema | |
JOIN information_schema.constraint_column_usage AS ccu | |
ON ccu.constraint_name = tc.constraint_name | |
AND ccu.table_schema = tc.table_schema | |
WHERE tc.constraint_type = 'FOREIGN KEY' | |
AND (tc.table_name = '' || ${table_name} || '' -- Tables referencing your table | |
OR ccu.table_name = '' || ${table_name} || ''); -- Tables referenced by your table | |
-- Find functions using the table | |
SELECT DISTINCT | |
p.proname AS function_name, | |
n.nspname AS schema_name | |
FROM | |
pg_proc p | |
JOIN pg_namespace n ON p.pronamespace = n.oid | |
JOIN pg_depend d ON d.objid = p.oid | |
JOIN pg_class c ON d.refobjid = c.oid | |
WHERE | |
c.relname = '' || ${table_name} || ''; | |
SELECT n.nspname AS schema_name, | |
p.proname AS function_name, | |
CASE p.prokind | |
WHEN 'f' THEN 'function' | |
WHEN 'p' THEN 'procedure' | |
WHEN 'a' THEN 'aggregate' | |
WHEN 'w' THEN 'window' | |
END AS type, | |
p.prosrc AS function_source | |
FROM pg_proc p | |
JOIN pg_namespace n ON p.pronamespace = n.oid | |
WHERE p.prosrc LIKE '%' || ${table_name} || '%' | |
AND n.nspname NOT IN ('pg_catalog', 'information_schema'); | |
-- Find triggers on the table | |
SELECT | |
trigger_name, | |
event_manipulation, | |
event_object_schema, | |
event_object_table, | |
action_statement, | |
action_timing | |
FROM | |
information_schema.triggers | |
WHERE | |
event_object_table = '' || ${table_name} || ''; | |
-- Find views referencing the table | |
SELECT DISTINCT | |
views.table_name AS view_name, | |
views.table_schema AS schema_name | |
FROM | |
information_schema.views, | |
information_schema.tables | |
WHERE | |
views.view_definition LIKE '%' || ${table_name} || '%'; | |
-- Show all dependencies | |
SELECT DISTINCT dependent_ns.nspname as dependent_schema, | |
dependent_view.relname as dependent_view, | |
source_ns.nspname as source_schema, | |
source_table.relname as source_table | |
FROM pg_depend | |
JOIN pg_rewrite ON pg_depend.objid = pg_rewrite.oid | |
JOIN pg_class as dependent_view ON pg_rewrite.ev_class = dependent_view.oid | |
JOIN pg_class as source_table ON pg_depend.refobjid = source_table.oid | |
JOIN pg_namespace dependent_ns ON dependent_view.relnamespace = dependent_ns.oid | |
JOIN pg_namespace source_ns ON source_table.relnamespace = source_ns.oid | |
WHERE source_table.relname = '' || ${table_name} || ''; | |
-- Find sequences | |
SELECT | |
t.schemaname, | |
t.tablename, | |
pg_get_serial_sequence(t.schemaname || '.' || t.tablename, c.column_name) as sequence_name, | |
c.column_name | |
FROM pg_tables t | |
JOIN information_schema.columns c | |
ON t.tablename = c.table_name | |
AND t.schemaname = c.table_schema | |
WHERE pg_get_serial_sequence(t.schemaname || '.' || t.tablename, c.column_name) IS NOT NULL | |
AND t.tablename = '' || ${table_name} || ''; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment