ERROR 23503: Insert or update on table violates foreign key constraint
Error Message
ERROR: insert or update on table "child_table" violates foreign key constraint "fk_constraint_name"
DETAIL: Key (parent_id)=(100) is not present in table "parent_table".// ...existing code...
Description
This error occurs when you try to insert or update a row with a foreign key reference, but the referenced value doesn't exist in the parent table. Foreign key constraints ensure referential integrity between tables.
Causes
- Inserting or updating with a foreign key value that doesn't exist in the referenced table
 - Missing parent records in data import operations
 - Incorrect order of operations when inserting related data
 
Solutions
- 
Add the missing reference first:
-- First, insert the parent record INSERT INTO parent_table (id, name) VALUES (100, 'Parent Name'); -- Then, insert the child record INSERT INTO child_table (id, parent_id) VALUES (1, 100); - 
Fix the foreign key value:
-- Use a value that exists in the parent table INSERT INTO child_table (id, parent_id) VALUES (1, (SELECT id FROM parent_table LIMIT 1)); - 
For bulk operations:
- Temporarily disable foreign key constraints (use with caution):
 
SET session_replication_role = 'replica'; -- Perform your inserts/updates SET session_replication_role = 'origin'; - 
Use deferred constraints (must be defined as DEFERRABLE):
BEGIN; SET CONSTRAINTS ALL DEFERRED; -- Insert operations in any order COMMIT; 
Prevention
- Ensure parent records exist before creating child records
 - Use appropriate cascade options when defining foreign keys
 - Validate data before attempting inserts or updates
 - Consider using application-level validation for complex relationships