Error de PostgreSQL: violates foreign key constraint

ERROR:  insert or update on table "orders" violates foreign key constraint "orders_customer_id_fkey"
DETAIL:  Key (customer_id)=(42) is not present in table "customers".

-- direzione opposta:
ERROR:  update or delete on table "customers" violates foreign key constraint "orders_customer_id_fkey" on table "orders"
DETAIL:  Key (id)=(42) is still referenced from table "orders".

Una clave foránea falló en una de sus dos direcciones: una fila hija apunta a un padre que no está ahí, o una fila padre se está eliminando mientras los hijos aún la referencian. La redacción te dice cuál — "is not present in" frente a "is still referenced from" — y el DETAIL nombra el valor de clave exacto.

Qué significa este error

Una clave foránea es una promesa comprobada en ambos extremos:

Causas comunes

Cómo diagnosticarlo

El DETAIL te da el nombre de la restricción, el valor de clave, y ambos nombres de tabla. A partir de ahí:

-- La restricción, al completo:
\d orders

-- Huérfanos ya presentes (para entender la magnitud del problema en las cargas):
SELECT o.*
FROM orders o
LEFT JOIN customers c ON c.id = o.customer_id
WHERE c.id IS NULL;

Cómo solucionarlo

🔍 Lectura relacionada: Elegir el índice adecuado — PostgreSQL no indexa automáticamente el lado referenciador de una clave foránea; los borrados en el padre escanean al hijo sin uno.