Delete em Cascada em Tabela com Auto Relacionamento

Pessoal,

não sei se é uma coisa simples. Porém eu tenho uma tabela que possui um auto relacionamento, e quando tento usar o comando delete ocorre erro de check constraint.

Banco: PostgreSQL

Segue a tabela abaixo:

CREATE TABLE t06_ator
(
  identificador serial NOT NULL,
  nome character varying(30) NOT NULL,
  id_generalizacao integer,
  projeto integer NOT NULL,
  CONSTRAINT t06_ator_pk PRIMARY KEY (identificador),
  CONSTRAINT ator_projeto_fk FOREIGN KEY (projeto)
      REFERENCES t01_projeto (codigo) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT id_gen_identificador_fk FOREIGN KEY (id_generalizacao)
      REFERENCES t06_ator (identificador) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
) 
WITHOUT OIDS;
ALTER TABLE t06_ator OWNER TO postgres;

Dados:

Comando executado:
delete from t06_ator where projeto = 1

Erro:
ERROR: update or delete on table “t06_ator” violates foreign key constraint “id_gen_identificador_fk” on table “t06_ator”

Solução:
Procuro algum jeito de realizar o delete em cascata, para não ocorrer o erro de deletar os registros pais antes dos filhos…

Alguem me ajuda ??

Troque o ON DELETE NO ACTION por ON DELETE CASCADE onde for necessário.

Ou delete a tabela de referência antes (eu prefiro fazer manualmente, justamente para evitar o risco de uma cagada destruir metade do BD).

Obrigado pela resposta,

mas eu já botei ON DELETE CASCADE nas duas FKs existentes e não funcionou. tipo assim:

view plaincopy to clipboardprint?
CREATE TABLE t06_ator   
(   
  identificador serial NOT NULL,   
  nome character varying(30) NOT NULL,   
  id_generalizacao integer,   
  projeto integer NOT NULL,   
  CONSTRAINT t06_ator_pk PRIMARY KEY (identificador),   
  CONSTRAINT ator_projeto_fk FOREIGN KEY (projeto)   
      REFERENCES t01_projeto (codigo) MATCH SIMPLE   
      ON UPDATE NO ACTION ON DELETE CASCADE,   
  CONSTRAINT id_gen_identificador_fk FOREIGN KEY (id_generalizacao)   
      REFERENCES t06_ator (identificador) MATCH SIMPLE   
      ON UPDATE NO ACTION ON DELETE CASCADE)   
WITHOUT OIDS;   
ALTER TABLE t06_ator OWNER TO postgres; 

Ficou faltando alguma coisa?

Vc disse:
[color=red]Ou delete a tabela de referência antes[/color]

O problema é que a tabela de referência é a mesma, por ser um auto relacionamento. Então nesse caso eu não tenho como prever se um registro está relacionado a outro ou a vários.

Eu tenho algo parecido no meu banco. Acabei colocando o servidor de aplicação para fazer a recursão e achar os ids que deveriam ser deletados anteriormente.

No SQL-Server, existe uma cláusula chamada WITH, que permite essa exclusão em árvore. No Postgre não sei te dizer se existe algo similar.

tem esse algoritimo de recursão ai ??

Não, fiz no trabalho, ficou na empresa. E é em C#, não em Java. Usando as classes de negócio.

humm vou ter que me virar aqui então. Obrigado.