Estou executando uma carga de dados em uma base Postgre através de comandos INSERT.

Para que não houvessem problemas em relação as foreing key durante a carga utilizei o comando SET CONSTRAINTS ALL DEFERED; dentro da transação.

BEGIN;

SET CONSTRAINTS ALL DEFERRED;

INSERT INTO xxxx .......
<...>

COMMIT;

Parece que este comando não está fazendo efeito por que, no momento da carga das linhas de uma tabela que possui um auto-relacionamento, estou recebendo um erro de violação de FK.

ERROR:  insert or update on table "xxxxx" violates foreign key constraint "fk_xxxxx_autorel"
DETAIL:  Key (id_xxxxxx_pai)=(275) is not present in table "xxxxxxx".

Verifiquei dentro do script que o INSERT com a chave = 275 está 10 comandos depois do INSERT que referencia esta linha, ou seja, as linhas estão fora da ordem esperada caso a checagem da constraints estivesse sendo feita a cada INSERT (modo IMMEDIATE).

Mas se todas as linhas necessárias estão presentes no script e foi sinalizado que a verificação das constraints fosse feita somente no final da transação (modo DEFERRED), por que está dando erro?

Verônica
Grupo DBA IBGE

_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/

Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios

Responder a