Descobrindo todas as colunas que fazem referência à outra no PostgreSQL
Como descobrir qual coluna de certa tabela é referenciado por outras de outras tabelas?
Em outras palavras, quais colunas de uma tabela tem FOREIGN KEYS/REFERENCES em outras?
Se você está procurando isso, provavelmente terá interesse neste post sobre o CASCADE. O CASCADE apaga ou atualiza todas as colunas que são FOREIGN KEY automaticamente.
Use a consulta abaixo e descubra!
Basta alterar o 'public', 'usuarios' e 'id' pelos valores desejados:
WITH params AS (SELECT 'public' AS schema_name, 'usuarios' AS table_name, 'id' AS column_name ) SELECT -- CONSTRAINT data r.constraint_schema, r.constraint_name, -- FOREIGN KEY data (the column that references another one) r.table_schema fk_schema, r.table_name fk_table, r.column_name fk_column, r.ordinal_position fk_ordinal_position, -- REFERENCES data (the column which is referenced) params.schema_name ref_schema, params.table_name ref_table, params.column_name ref_column FROM information_schema.constraint_column_usage u INNER JOIN information_schema.referential_constraints fk ON u.constraint_catalog = fk.unique_constraint_catalog AND u.constraint_schema = fk.unique_constraint_schema AND u.constraint_name = fk.unique_constraint_name INNER JOIN information_schema.key_column_usage r ON r.constraint_catalog = fk.constraint_catalog AND r.constraint_schema = fk.constraint_schema AND r.constraint_name = fk.constraint_name INNER JOIN params ON TRUE AND u.table_schema IN (params.schema_name) AND u.table_name IN (params.table_name) AND u.column_name IN (params.column_name) ;
Atenção, essa consulta só funciona para versões mais modernas do PostgreSQL. Isso porque versões mais antigas não têm constraints de nome único.
Referências
Discussão no Stack Overflow
https://stackoverflow.com/questions/5347050/postgresql-sql-script-to-get-a-list-of-all-tables-that-has-a-particular-column