UPSERT म्हणजे "insert करा, किंवा जर ते आधीच अस्तित्वात असेल तर update करा." PostgreSQL हे INSERT ... ON CONFLICT सह लागू करते — एक row insert करा, परंतु जर ते unique constraint चे उल्लंघन करेल, तर त्याऐवजी विद्यमान row update करा (किंवा काहीही करू नका). हे सामान्य "insert-or-update" गरज atomically हाताळते.
ON CONFLICT हे समस्या सोडवते
You want to insert a row, but it might already exist (by a unique key):
❌ a plain INSERT fails with a unique-violation error if it exists
❌ check-then-insert (SELECT, then INSERT or UPDATE) has a RACE CONDITION
(another transaction could insert between your check and insert)
→ ON CONFLICT does it atomically in ONE statement (no race condition)
