# How to Fix the "can't insert a non-default value into column id" Error in Postgres

> The “can&#x27;t insert a non-default value into column id” error arises when a user tries to insert the value to an IDENTITY column that is created using the &quot;GENER…

The invention of the " **IDENTITY** " column feature in PostgreSQL 10 and later versions enables the creation of columns with auto-incrementing values. However, users may encounter the " **can 't insert a non-default value into column id**” error when working with the IDENTITY column. This error typically occurs when the IDENTITY column is defined with the " **GENERATED ALWAYS** " option.

This article illustrates a practical guide on fixing the "can't insert a non-default value into column id" Error in Postgres.

 **How to Fix the "can't insert a non-default value into column id" Error in Postgres?**

The “ **can 't insert a non-default value into column id**” error arises when a user tries to insert the value to an IDENTITY column that is created using the " **GENERATED ALWAYS** " option. To solve this error, use the **OVERRIDING SYSTEM VALUE** option while inserting a user-specified value.

Follow the steps below to fix the stated error:

 **Step 1: Create a Table**

Let’s create a new table with an IDENTITY column, as follows:
    
    
    CREATE TABLE cp_example(
    id int GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    blog_name TEXT
    );

The desired table has been successfully created.

 **Step 2: Insert Data**

Now let’s insert a couple of records into the selected table using the INSERT query:
    
    
    INSERT INTO cp_example(blog_name)
    VALUES ('blog 1'),
    ('blog 2');

The given records have been inserted into the “cp_example” table:

 **Step 3: Verify the Table’s Data**

Fetch the newly inserted records to comprehend the working of the IDENTITY column:
    
    
    SELECT * FROM cp_example;

 **Step 4: Insert a User-specified Value in the IDENTITY Column**

Now, let’s try to insert a user-specified value in the IDENTITY column and see how Postgres deals with that specific scenario:
    
    
    INSERT INTO cp_example(id, blog_name)
    VALUES (5, 'blog 5');

An error occurs while inserting an explicit value into the IDENTITY column:

 **Step 5: Use the OVERRIDING SYSTEM VALUE Option**

The most convenient way to address the stated issue is to use the “OVERRIDING SYSTEM VALUE” option:
    
    
    INSERT INTO cp_example( id, blog_name) 
    OVERRIDING SYSTEM VALUE
    VALUES (5, 'blog 5')
    RETURNING *;

The below-provided output snippet shows that the stated error has been successfully rectified:

That’s all about fixing the "can't insert a non-default value into column id" error in Postgres.

 **Conclusion**

In PostgreSQL, the “ **can 't insert a non-default value into column id**” error arises when a user tries to insert the value to an IDENTITY column that is created using the " **GENERATED ALWAYS** " option. To solve this error, use the **OVERRIDING SYSTEM VALUE** option while inserting a user-specified value. This post has presented a complete process for solving the “ **can 't insert a non-default value into column id**” error in PostgreSQL.

---
[View this page online](https://www.commandprompt.com/education/how-to-fix-the-cant-insert-a-non-default-value-into-column-id-error-in-postgres/)