DBAtlas · Atlas d'exploitation des bases de données

23001: restrict_violation

PostgreSQL

Que signifie cette erreur ?

Le code restrict_violation du standard SQL. Important : PostgreSQL signale la violation d'une clé étrangère définie ON DELETE/ON UPDATE RESTRICT ou NO ACTION non pas avec ce code mais avec 23503 (foreign_key_violation) ; en pratique, vous ne verrez pas ce code provenant de PostgreSQL lui-même.

Cause

Lorsqu'une ligne parente ayant des lignes enfants dépendantes est supprimée ou que sa clé est modifiée, PostgreSQL renvoie 23503. 23001 apparaît généralement dans du code applicatif porté depuis une autre base ou comme erreur personnalisée d'une extension. Contrairement à NO ACTION, RESTRICT ne peut pas différer le contrôle jusqu'à la fin de la transaction et échoue immédiatement.

Comment la corriger

Supprimez/mettez à jour d'abord les lignes enfants dépendantes ou rattachez-les à un autre parent ; traitez ensuite la ligne parente. Si la règle métier le permet, envisagez de redéfinir la clé étrangère avec ON DELETE CASCADE ou SET NULL. Lors de suppressions en masse, respectez l'ordre de suppression (enfant d'abord, puis parent).

Ouvrir dans DBAtlas →

Autres entrées pour ce moteur