Skip to content

feat: Support INSERT ON CONFLICT (UPSERT) #193

@ajitpratap0

Description

@ajitpratap0

Description

Add support for PostgreSQL's INSERT ... ON CONFLICT (upsert) syntax.

Example SQL

-- ON CONFLICT DO NOTHING
INSERT INTO users (id, name) VALUES (1, 'John')
ON CONFLICT (id) DO NOTHING;

-- ON CONFLICT DO UPDATE
INSERT INTO users (id, name, email) VALUES (1, 'John', '[email protected]')
ON CONFLICT (id) DO UPDATE SET name = EXCLUDED.name, email = EXCLUDED.email;

-- With WHERE clause
INSERT INTO products (sku, price) VALUES ('ABC', 100)
ON CONFLICT (sku) DO UPDATE SET price = EXCLUDED.price
WHERE products.price < EXCLUDED.price;

-- ON CONFLICT ON CONSTRAINT
INSERT INTO users (id, name) VALUES (1, 'John')
ON CONFLICT ON CONSTRAINT users_pkey DO NOTHING;

Current Behavior

INSERT with ON CONFLICT is not supported.

Expected Behavior

Parser should recognize ON CONFLICT clause with DO NOTHING or DO UPDATE actions.

Priority

High - commonly used PostgreSQL pattern for upserts

Implementation Notes

  • Add OnConflictClause AST node
  • Support conflict target (columns or constraint name)
  • Support DO NOTHING and DO UPDATE SET actions
  • Handle EXCLUDED pseudo-table references

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions