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
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a