On 03/27/2013 23:44, Marcos Aurelio Nobre wrote:
sALLdações .
Boa noite. Estou precisando de uma ajuda.
Em um servidor 9.1 tenho três schemas A, B e C
Em A há uma tabela X que tem a coluna C como sua PK
Em B há 30 tabelas que tem C como FK com a DRI : ON UPDATE CASCADE ON
DELETE NO ACTION.
Em C há 400 tabelas e 80% delas tem C como FK, porém sem DRI
implementado nas contraints.
Então eu não gostaria de "entrar" em cerca de 200 ~ 300 tabelas ,
excluir as FK-Constraints que referem-se / mencionam C e recriá-las
com a DRI de update-cascade.
Assim eu vos pergunto:
1) Existe algum commando de DDL tipo ALTER CONSTRAINT <.> que
pudesse ser aplicado a estas tabela, modificando-lhes ou
incorporando-lhes um UPDATE CASCADE ?
Bom... acho eu que não... mais tem outras pessoas que podem te ajudar
nisso...
2) Existe algum SELECT que possa ser aplicado às SYSTEM TABLES de modo
que eu descubra quais tabelas utilizam a coluna C como foreign key ?
Talvez ajude você..
SELECT distinct tc.constraint_name,
tc.constraint_type,
tc.table_schema,
tc.table_name,
kcu.column_name,
tc.is_deferrable,
tc.initially_deferred,
rc.match_option AS match_type,
rc.update_rule AS on_update,
rc.delete_rule AS on_delete,
ccu.table_schema,
ccu.table_name AS references_table,
ccu.column_name AS references_field
FROM information_schema.table_constraints tc
LEFT JOIN information_schema.key_column_usage kcu
ON tc.constraint_catalog = kcu.constraint_catalog
AND tc.constraint_schema = kcu.constraint_schema
AND tc.constraint_name = kcu.constraint_name
LEFT JOIN information_schema.referential_constraints rc
ON tc.constraint_catalog = rc.constraint_catalog
AND tc.constraint_schema = rc.constraint_schema
AND tc.constraint_name = rc.constraint_name
LEFT JOIN information_schema.constraint_column_usage ccu
ON rc.unique_constraint_catalog = ccu.constraint_catalog
AND rc.unique_constraint_schema = ccu.constraint_schema
AND rc.unique_constraint_name = ccu.constraint_name
WHERE lower(tc.constraint_type) in ('foreign key')
AND ccu.table_name = 'nome da tablea que tens a PK'
--AND ccu.column_name = 'campo PK'
--AND kcu.column_name = 'nome do campo nas FK'
order by tc.constraint_name
3) Outra variante de consulta e descobrir qual constraint utiliza
Gratos:
MN
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral