AdvancedINSERT, UPDATE, DELETE

MERGE statement (PostgreSQL 15+)

The query

SQL
MERGE INTO employees AS target
USING (VALUES
  (101, 'John', 'Doe', 75000),
  (999, 'New', 'Employee', 55000)
) AS source(emp_id, first_name, last_name, salary)
ON target.emp_id = source.emp_id

WHEN MATCHED AND target.salary != source.salary THEN
  UPDATE SET salary = source.salary

WHEN NOT MATCHED THEN
  INSERT (first_name, last_name, salary)
  VALUES (source.first_name, source.last_name, source.salary)

WHEN MATCHED AND source.salary IS NULL THEN
  DELETE;
Tested against PostgreSQL 16

Note

MERGE (SQL:2003 standard) replaces complex UPSERT patterns. Available in PostgreSQL 15+.

Tables referenced