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).