Olá. To desenvolvendo uma aplicação
client/server com Delphi, ZeosLib e PG 8.0.
Estou com um sério problema e acredito que seja do
PG.
Tenho duas tabelas, PESSOA e USUARIO. Em PESSOA
guardo o ID do usuário que criou o registro, no campo ID_USUARIO. Criei uma FK
(NOT DEFERRABLE) nesse campo com a tabela USUARIO e é aí que se encontra o
problema.
Abro duas seções de meu sistema e nas duas mando
inserir um registro. Assim que o registro é inserido, já defino automaticamente
no campo ID_USUARIO o código do usuário ativo, e após isso é dado um POST para
que o registro já seja gravado. Quando esse POST automático é dado, o outro
sistema fica travado até que a transação que deu o POST seja
finalizada.
Testei em outras tabelas, e isso só acontece em
tabelas que possuam FK.
Em 3 dias de testes, descobri que se eu não defino
o ID_USUARIO após inserir e antes do POST, ou seja, se ao inserir dou apenas o
POST sem definir o usuário (FK), dá tudo certo, não dá problemas, o outro
sistema não fica travado. No entanto, se eu ecluo a FK e deixo como estava
antes, definindo o ID_USUARIO antes do POST, o problema não acontece. Cheguei à
conclusão que o problema é com a FK.
Então alterei a FK para DEFERRABLE - INITIALLY
DEFERRED. O problema desapareceu.
Alguém sabe se realmente existe esse
bug?
Obrigado.
Nelson.