Referencia técnica independienteSitio oficial
  • Software y sistemas
  • Base de datos

23503

PostgreSQL 23503 en base de datos: la clave foránea no tiene fila de referencia

Verificada con fuentes2 fuentesRevisada 3 oct 2026
¿Viene un técnico? Mira los 2 pasos que debe enseñarte
Trace

Evidencia vinculada a esta decisión

Ver fuente: PostgreSQL 18 Appendix A: Error Codes

Nivel de riesgo

Precaución

Actúa con cuidado; puede requerir técnico si persiste.

Urgencia

Media — atiéndelo hoy

Respuesta rápida

La operación rompe una relación entre tablas: una fila apunta a otra que no existe, o se intenta borrar una fila que otras siguen usando. Revisa la restricción y la tabla que nombra el error y comprueba qué fila falta o qué filas dependen de ella.

Seguridad primero

Antes de continuar

  • No cambies la restricción a CASCADE solo para que el borrado pase: borrará también todas las filas dependientes.

Puedes hacerlo con seguridad

  • Restricción, tabla y tipo de operación
  • Existencia del padre o de las dependientes

Deja estas tareas a un profesional cualificado

  • No intentes esta tarea profesional: Ordenar las operaciones o corregir el dato
  • No intentes esta tarea profesional: Revisar la acción ON DELETE con el responsable de los datos

Lo que un técnico debe poder justificar

Viene un técnico

Estos son los pasos que tiene que hacer y enseñarte. Márcalos mientras trabaja: si se salta pasos, no aceptes el cambio de pieza.

No son instrucciones para que abras o manipules el equipo. Son las comprobaciones que deben sostener una conclusión técnica.

  1. Ordenar las operaciones o corregir el dato

    Qué haceEl desarrollador inserta primero el padre y luego la hija, o corrige el valor de la clave.

    Te tiene que enseñarel orden de las sentencias.

    Por escritola prueba que ya no falla.

  2. Revisar la acción ON DELETE con el responsable de los datos

    Qué haceSi el borrado debe arrastrar dependientes, el equipo valora cambiar la acción a CASCADE o SET NULL con una migración revisada.

    Te tiene que enseñarla definición actual y la propuesta.

    Por escritola aprobación.

Antes de aceptar una pieza o reparación

Aún no ha demostrado nada. No aceptes un cambio de pieza solo por el código.

Sigue estos pasos

Aviso: Sigue el orden documentado. Un código identifica el sistema afectado, pero por sí solo no demuestra qué pieza está averiada.

  1. Restricción, tabla y tipo de operación

    Sin herramientas especiales

    Quién:
    tú, como desarrollador.
    Cómo:
    lee Constraint name, Table name y Detail del error, y anota si la sentencia era INSERT, UPDATE, DELETE o el COMMIT.
    Resultado que importa:
    qué relación falla y en qué dirección.
    Si fue INSERT o UPDATE en la hija:
    apunta a un padre que falta; compruébalo.
    Si fue DELETE o UPDATE en el padre:
    indica filas dependientes; búscalas antes de decidir.
    Evidencia a conservar:
    campos del error, sentencia y hora.

    Evidencia: PostgreSQL error and notice fields · PostgreSQL constraints

  2. Existencia del padre o de las dependientes

    Requiere herramientas

    Quién:
    tú, como desarrollador.
    Cómo:
    consulta en modo lectura la tabla referenciada por el valor de la clave, o la tabla hija por el valor del padre que intentas borrar.
    Resultado que importa:
    si el padre existe o cuántas filas dependen de él.
    Si el padre no existe:
    confirma el dato incorrecto o un orden de inserción equivocado.
    Si hay dependientes:
    confirma que el borrado debe decidirse (conservar, reasignar o borrar en cascada).
    Evidencia a conservar:
    resultado de la consulta.

    Solo lectura. No borres filas dependientes para desbloquear el borrado: no lo hagas sin el responsable de los datos.

    Evidencia: PostgreSQL constraints

Situación no resuelta

Si el error persiste, no sigas probando por tu cuenta. Mira qué tiene que hacer y enseñarte el técnico.

Técnico virtual

¿Sigue apareciendo 23503 tras comprobarlo?

Este recorrido usa el código exacto y tus respuestas para elegir una prueba, su resultado esperado y la siguiente bifurcación.

Dónde se aplica este código

Un código solo tiene significado dentro del producto y la versión correctos.

Ámbito principal

Sistema
Software y sistemas
Marca
PostgreSQL
Tipo de producto
Base de datos

Variantes conocidas del código

  • foreign_key_violation
  • PostgreSQL 23503
  • SQLSTATE 23503

Qué significa

El apéndice A asigna 23503 a foreign_key_violation, en la clase 23. Una clave foránea exige que los valores de unas columnas coincidan con los de alguna fila de otra tabla. Con la acción por defecto ON DELETE NO ACTION, borrar una fila referenciada suele dar error; CASCADE borra también las dependientes. Si la restricción es diferible, la comprobación puede hacerse al final de la transacción. El código dice qué relación se rompió, no si el fallo está en la fila hija o en el borrado del padre.

Advertencias y condiciones de parada

  • Precauciónadvertencia editorial

    No cambies la restricción a CASCADE solo para que el borrado pase: borrará también todas las filas dependientes.

    Evidencia: PostgreSQL constraints

Síntomas y causas

Causas probables · en orden

  • Fila hija que apunta a un padre inexistenteFrecuente

    Se inserta o modifica una fila con un valor que no existe en la tabla referenciada. Ocurre en INSERT o UPDATE de la tabla hija.

    Evidencia: PostgreSQL constraints

  • Borrado o cambio de un padre con filas dependientesFrecuente

    Se borra o cambia una fila que otras referencian y la acción configurada no lo permite. Ocurre en DELETE o UPDATE de la tabla padre.

    Evidencia: PostgreSQL constraints

  • Comprobación diferida al confirmarPosible

    La restricción es DEFERRABLE INITIALLY DEFERRED y el error salta en el COMMIT, lejos de la sentencia que lo causó.

    Evidencia: PostgreSQL 18 SET CONSTRAINTS

Fuentes y referencias técnicas

  1. 1

    PostgreSQL 18 Appendix A: Error Codes

    PostgreSQL Global Development Group · 2026 · official_doc

  2. 2

    PostgreSQL constraints

    PostgreSQL Global Development Group · 2026 · official_doc

Fuentes: PostgreSQL 18 Appendix A: Error Codes · PostgreSQL constraintsrevisado 2026-10-03 · verificado

¿Te ha resultado útil esta ficha?