DBAtlas · Atlas de operaciones de bases de datos

23001: restrict_violation

PostgreSQL

¿Qué significa?

Código restrict_violation del estándar SQL. Importante: PostgreSQL no informa la infracción de una foreign key definida ON DELETE/ON UPDATE RESTRICT o NO ACTION con este código, sino con 23503 (foreign_key_violation); en la práctica no verá este código en el núcleo de PostgreSQL.

¿Por qué ocurre?

Cuando se elimina una fila padre con filas hijas dependientes o se cambia su clave, PostgreSQL devuelve 23503. 23001 suele aparecer en código de aplicación portado desde otra base de datos o como error personalizado de una extensión. A diferencia de NO ACTION, RESTRICT no puede diferir la comprobación hasta el final de la transacción y falla de inmediato.

Cómo solucionarlo

Elimine/actualice primero las filas hijas dependientes o muévalas a otro padre; después procese la fila padre. Si la regla de negocio lo permite, considere redefinir la foreign key con ON DELETE CASCADE o SET NULL. En eliminaciones masivas, respete el orden de eliminación (primero el hijo, después el padre).

Abrir en DBAtlas →

Más entradas de este motor