Re: [pgbr-geral] check foreign key

2007-12-28 Por tôpico Luciano Mittmann
Em 18/12/07, Alexsander Rosa [EMAIL PROTECTED] escreveu:

 Pode-se postergar a checagem de chaves:
 http://www.postgresql.org/docs/current/static/sql-set-constraints.html

 BEGIN;


 SET CONSTRAINTS ALL DEFERRED;

 INSERT INTO  ...
 ...

 COMMIT;


 Mas isso não *desliga* a checagem, apenas posterga (deixa para o final).
 Quando o COMMIT for executado as constraints serão todas checadas. Há casos
 raros onde dois registros em duas tabelas diferentes se referenciam
 mutuamente com chaves estrangeiras não-nulas -- não me perguntem, mas já vi
 isso :-). Nesse caso, um INSERT em uma requer um INSERT na outra mas ambos
 falham por causa das chaves estrangeiras. Com esse comando pode-se fazer os
 dois INSERTS numa transação. Para permitir futuramente que se use o comando
 acima, as constraints em questão precisam ser declaradas como DEFERRABLE
 (ver documentação).

 Não sei se isso resolve o problema do Junior Prado...



Lí um artigo bem completo sobre  Deferred Constraints escrito por Rodrigo
Hjort na última edição da SQL Magazine ... leitura bem interessante.




Em 18/12/07, Euler Taveira de Oliveira [EMAIL PROTECTED]  escreveu:
 
  junior Prado wrote:
 
   Como desligar e ligar a checagem de chaves estrangeiras?
  
   check foreign key = 0; //está certo?
  
  Não existe tal comando no PostgreSQL. Para desabilitar verificação de
  chaves estrangeira somente removendo-as e depois recriando-as.
  Certifique-se que não manipulará os dados entre estas duas etapas pois
  você poderá não conseguir recriar as chaves estrangeiras.
 
  ALTER TABLE foo DROP CONSTRAINT bar_col_fkey;
 
 
  --
Euler Taveira de Oliveira
http://www.timbira.com/
  ___
  pgbr-geral mailing list
  pgbr-geral@listas.postgresql.org.br
  https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
 



 --
 Atenciosamente,

 Alexsander da Rosa
 Linux User #113925
 ___
 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


[pgbr-geral] check foreign key

2007-12-18 Por tôpico junior Prado
Galera,

Como desligar e ligar a checagem de chaves estrangeiras?

check foreign key = 0; //está certo?

-- 
Valter Cezar Prado Junior
Analista TI

Sem saber como fazer ele fez!
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] check foreign key

2007-12-18 Por tôpico junior Prado
Euler,

Obrigado pela dica.

Att.

Valter Cezar Prado Junior
Analista TI

Sem saber como fazer ele fez!

Em 18/12/07, Euler Taveira de Oliveira [EMAIL PROTECTED] escreveu:

 junior Prado wrote:

  Como desligar e ligar a checagem de chaves estrangeiras?
 
  check foreign key = 0; //está certo?
 
 Não existe tal comando no PostgreSQL. Para desabilitar verificação de
 chaves estrangeira somente removendo-as e depois recriando-as.
 Certifique-se que não manipulará os dados entre estas duas etapas pois
 você poderá não conseguir recriar as chaves estrangeiras.

 ALTER TABLE foo DROP CONSTRAINT bar_col_fkey;


 --
   Euler Taveira de Oliveira
   http://www.timbira.com/
 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




-- 
Valter Cezar Prado Junior
Analista TI

Sem saber como fazer ele fez!
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] check foreign key

2007-12-18 Por tôpico Alexsander Rosa
Pode-se postergar a checagem de chaves:
http://www.postgresql.org/docs/current/static/sql-set-constraints.html

BEGIN;

SET CONSTRAINTS ALL DEFERRED;

INSERT INTO  ...
...

COMMIT;


Mas isso não *desliga* a checagem, apenas posterga (deixa para o final).
Quando o COMMIT for executado as constraints serão todas checadas. Há casos
raros onde dois registros em duas tabelas diferentes se referenciam
mutuamente com chaves estrangeiras não-nulas -- não me perguntem, mas já vi
isso :-). Nesse caso, um INSERT em uma requer um INSERT na outra mas ambos
falham por causa das chaves estrangeiras. Com esse comando pode-se fazer os
dois INSERTS numa transação. Para permitir futuramente que se use o comando
acima, as constraints em questão precisam ser declaradas como DEFERRABLE
(ver documentação).

Não sei se isso resolve o problema do Junior Prado...

Em 18/12/07, Euler Taveira de Oliveira [EMAIL PROTECTED] escreveu:

 junior Prado wrote:

  Como desligar e ligar a checagem de chaves estrangeiras?
 
  check foreign key = 0; //está certo?
 
 Não existe tal comando no PostgreSQL. Para desabilitar verificação de
 chaves estrangeira somente removendo-as e depois recriando-as.
 Certifique-se que não manipulará os dados entre estas duas etapas pois
 você poderá não conseguir recriar as chaves estrangeiras.

 ALTER TABLE foo DROP CONSTRAINT bar_col_fkey;


 --
   Euler Taveira de Oliveira
   http://www.timbira.com/
 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




-- 
Atenciosamente,

Alexsander da Rosa
Linux User #113925
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral