2013/6/19 Wellington Openheimer <[email protected]>

> Olá pessoal,
>
> Tenho o seguinte problema:
>
> Faço um select na tabela B na qual retorna dados. Depois faço um delete e
> retorna 0 rows affected. Refaço o select e os dados ainda estão lá.
>
> Caso:
>
> A tabela B possui chave estrangeira para a tabela A. Esta chave está ON
> DELETE CASCADE. Mas a tabela B possui uma Trigger BEFORE DELETE, na qual
> não deixa deletar por um determinado motivo.
>

Com certeza os dados que está tentando deletar estão nesse "determinado
motivo"... Simples assim. Se realmente deveria/poderia deletá-los você deve:

1. Corrigir a trigger para aceitar o caso;
2. **ou**, caso seja a correção de um erro, em uma única transação, você
deve desabilitar a trigger, deletar os registros, re-habilitar a trigger.
Exemplo:

BEGIN;
ALTER TABLE foo DISABLE TRIGGER bar;
DELETE FROM foo WHERE ...;
ALTER TABLE foo ENABLE TRIGGER bar;
COMMIT;

(isso irá bloquear qualquer uso dessa tabela enquanto estiver executando
essa operação)

Olha que estranho, esse dado que estou tentando deletar não está na tabela
> A(chave). Concluí que houve um delete na tabela A que não conseguiu deletar
> por cascata na tabela B e agora travou os dados na tabela B.
>
>
Não entendi, você está deletando na A ou na B? E afinal, a chave é da A pra
B ou o contrário?


Atenciosamente,
-- 
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a