Error
Error Code: 23502

PostgreSQL Error 23502: NOT NULL Violation

📦 PostgreSQL
📋

Description

Error 23502, 'not null violation', occurs when an attempt is made to insert or update a row in a PostgreSQL table, but a required column (defined with `NOT NULL`) is provided with a `NULL` value. This violates an integrity constraint, ensuring that critical data fields always contain a value.
💬

Error Message

not null violation
🔍

Known Causes

4 known causes
⚠️
Missing Data on Insert
An `INSERT` statement did not provide a value for a column that is explicitly defined as `NOT NULL`, leading to an attempt to store a `NULL`.
⚠️
Updating to NULL Value
An `UPDATE` statement attempted to set a `NOT NULL` column to `NULL`, which is disallowed by the table's schema definition.
⚠️
Incorrect or Missing Default
A `NOT NULL` column without a provided value relies on a default, but either no default is set, or the default itself resolves to `NULL`.
⚠️
Application Logic Error
The application code is attempting to write data where a required field is unexpectedly empty or explicitly set to `NULL` before sending it to the database.
🛠️

Solutions

5 solutions available

1. Provide Value for NOT NULL Column easy

Include required column in INSERT

1
Check which columns are NOT NULL
SELECT column_name, is_nullable FROM information_schema.columns
WHERE table_name = 'your_table' AND is_nullable = 'NO';
2
Include all required columns
INSERT INTO users (name, email) VALUES ('John', 'john@test.com');

2. Set Default Value medium

Add default for the NOT NULL column

1
Add default to existing column
ALTER TABLE users ALTER COLUMN status SET DEFAULT 'active';
2
Add default timestamp
ALTER TABLE users ALTER COLUMN created_at SET DEFAULT NOW();
3
Add default with generated value
ALTER TABLE users ALTER COLUMN id SET DEFAULT gen_random_uuid();

3. Allow NULL Values easy

Remove NOT NULL constraint if optional

1
Drop NOT NULL constraint
ALTER TABLE users ALTER COLUMN middle_name DROP NOT NULL;

4. Fix UPDATE Setting NULL easy

Prevent NULL assignment in UPDATE

1
Use COALESCE to keep existing value
UPDATE users SET name = COALESCE(new_value, name) WHERE id = 1;
2
Or use empty string instead of NULL
UPDATE users SET name = '' WHERE id = 1;

5. Handle NULL in Application easy

Validate data before sending to database

1
Python validation
def validate_user(data):
    if not data.get('email'):
        raise ValueError('Email is required')
    return data
2
JavaScript validation
const email = userData.email || 'default@example.com';
🔗

Related Errors

5 related errors