Olá a todos,
Estou com a seguinte situação de problema.
PostgreSQL 8.3.5 (Ubuntu Server e Win 2003 Server) independe o SO.
Ao executar os scripts a baixo ocorre o segunte erro:
WARNING: terminating connection because of crash of another server process
DETAIL: The postmaster has commanded this server process to roll back
the current transaction and exit, because another server process exited
abnormally and possibly corrupted shared memory.
Script: Cria tabela pai - filho - neto ligadas por FK Cascade, altero o
comportamento da pg_trigger para postergar a validação da constraint
(Para ficar compativel a versão 7.4 porque migramos), ao excluir o
registro pai ocorre o erro.
Obs1.: No Windows precisor reiniciar o serviço.
Obs2.: Linux derruma todas as conexões mas não preciso reiniciar o serviço.
Obs3.: Fiz um teste na versão 8.4 e também ocorreu o erro.
Conversei com o Euler na PgCon sobre essa situação.
-------Scripts-------
CREATE TABLE pai
(
co_pai double precision NOT NULL,
no_descricao character varying(50) NOT NULL,
CONSTRAINT pk_pai PRIMARY KEY (co_pai)
)
WITH (OIDS=TRUE);
ALTER TABLE pai OWNER TO postgres;
CREATE TABLE filho
(
co_filho double precision NOT NULL,
co_pai double precision NOT NULL,
no_descricao character varying(50) NOT NULL,
CONSTRAINT pk_filho PRIMARY KEY (co_filho)
)
WITH (OIDS=TRUE);
ALTER TABLE filho OWNER TO postgres;
CREATE TABLE neto
(
co_neto double precision NOT NULL,
co_filho double precision NOT NULL,
no_descricao character varying(50) NOT NULL,
CONSTRAINT pk_neto PRIMARY KEY (co_neto)
)
WITH (OIDS=TRUE);
ALTER TABLE filho OWNER TO postgres;
ALTER TABLE filho
ADD CONSTRAINT fk_filho_pai FOREIGN KEY (co_pai)
REFERENCES pai (co_pai) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE;
ALTER TABLE neto
ADD CONSTRAINT fk_neto_filho FOREIGN KEY (co_filho)
REFERENCES filho (co_filho) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE;
UPDATE pg_constraint SET condeferred = TRUE, condeferrable = TRUE;
UPDATE pg_trigger SET tgdeferrable = TRUE, tginitdeferred = TRUE;
INSERT INTO pai VALUES(1, 'PAI-1');
INSERT INTO filho VALUES(1,1, 'Filho PAI-1');
INSERT INTO filho VALUES(2,1, 'Filho PAI-1');
INSERT INTO filho VALUES(3,1, 'Filho PAI-1');
INSERT INTO neto VALUES(1,1, 'Neto PAI-1');
INSERT INTO neto VALUES(2,2, 'Neto PAI-1');
INSERT INTO neto VALUES(3,3, 'Neto PAI-1');
DELETE FROM pai WHERE co_pai = 1
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral