PostgreSQL Cheat Sheet/Upsert with ON CONFLICT

Handle unique conflicts by updating instead of failing.

Section: Insert, Update, Delete, and Merge

Upsert with ON CONFLICT

sql
sql
INSERT INTO public.users (email)
VALUES ('a@example.com')
ON CONFLICT (email) DO UPDATE
SET created_at = now();
Explanation

See summary for usage details.

Learn the surrounding workflow

Compare similar commands or jump into common fixes when this command is part of a bigger troubleshooting path.

Related commands

Same sheet · prioritizing Insert, Update, Delete, and Merge
Insert row
Insert one row into a table.
OpenIn sheetsqlsame section
Insert multiple rows
Insert many rows in one statement.
OpenIn sheetsqlsame section
Insert with RETURNING
Insert rows and immediately return generated values.
OpenIn sheetsqlsame section
Update rows
Modify matching rows.
OpenIn sheetsqlsame section
Update from another table
Update rows using another table in the same statement.
OpenIn sheetsqlsame section
Delete rows
Delete matching rows.
OpenIn sheetsqlsame section