DBAtlas · Atlas de operações de banco de dados

23001: restrict_violation

PostgreSQL

O que significa?

O código restrict_violation do padrão SQL. Importante: o PostgreSQL informa a violação de uma foreign key definida com ON DELETE/ON UPDATE RESTRICT ou NO ACTION não com este código, mas com 23503 (foreign_key_violation); na prática, você não verá este código vindo do PostgreSQL em si.

Por que acontece?

Quando uma linha pai com linhas filhas dependentes é excluída ou tem sua chave alterada, o PostgreSQL retorna 23503. O 23001 geralmente aparece em código de aplicação portado de outro banco ou como erro personalizado de uma extensão. Diferentemente de NO ACTION, RESTRICT não pode adiar a verificação para o fim da transação e falha imediatamente.

Como resolver

Primeiro exclua/atualize as linhas filhas dependentes ou mova-as para outro pai; depois processe a linha pai. Se a regra de negócio permitir, considere redefinir a foreign key com ON DELETE CASCADE ou SET NULL. Em exclusões em massa, acerte a ordem de exclusão (primeiro o filho, depois o pai).

Abrir no DBAtlas →

Mais entradas deste banco