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

Responder a