Olá!

 Tenho a seguinte estrutura em tabelas no PostGreSQL:

 endereço
   idt int primary key
 responsavel
   cpf varchar(14) primary key
   idt_endereco foreign key(endereco)
 empresa
   cnpj varchar(18) primary key
   responsavel foreign key (responsavel)
   idt_endereco foreign key (endereco)

 Tomando como base a seguinte massa de dados teríamos:

 endereco
   idt
   1 // endereço do responsavel
   2 // endereço da empresa

 responsavel
   cpf                      idt_endereco
   123.456.789-12       1

 empresa
   cnpj         responsavel                         idt_endereco
   01.123.456/0001-78   123.456.789-12  2

 O endereço é cadastrado sem erros.
 O responsavel também é cadastrado sem erros.

 Ao cadastrar a empresa, ocorre exceção (violação de chave estrangeira)
 acusando
 que o responsavel não existe, embora não tenha ocorrido exceção ao
 cadastrá-lo;

 Fiz a seguinte alteração: Retirei a chave estrangeira da empresa que aponta
 para
 o responsavel.

 Tentei realizar novamente o cadastro e neste caso passou a ser gerada exceção
 com relação ao Endereço da empresa .

 Retirei também a chave estrangeira da empresa que apontava para o endereço,
 tentei novamente, e para minha surpresa, desta vez acusou exceção na tabela
 de
 responsavel com relação ao endereço.

 Apesar do dado pendente ser cadastrado sem gerar exceção, o PostGreSQL acusa
 que o mesmo não existe nas tabelas primarias e gera exceção de foreign key.

 Obs 1.
 Como não posso ter um endereço pendurado, sem está relacionado com um
 responsavel ou uma empresa; Da mesma forma que não posso ter um esponsavel
 pendurado sem empresa, O "commit" só ocorre no final do cadastro da empresa,
 caso não ocorra nenhuma exceção. Ocorrendo exceção em qualquer um dos
 "insert",
 é executado "rollback" em todo processo.

 obs 2.
 Isso estava funcionando perfeitamente, sem problema algum!

 O que pode está acontecendo?!

 Desde já, muito obrigado a todos!


___________________________________________________________________________________
Agora todas as suas ligações DDD e DDI com o 21 vêm junto com a conta do seu
telefone de casa ou celular. 
Mais comodidade e praticidade para você. Faz um 21 e aproveite!

_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
http://www.postgresql.org.br

Responder a