UPSERT का अर्थ है "insert करें, या यदि यह पहले से मौजूद है तो update करें।" PostgreSQL इसे INSERT ... ON CONFLICT के साथ लागू करता है — एक row insert करें, लेकिन यदि यह किसी unique constraint का उल्लंघन करेगा, तो इसके बजाय मौजूदा row को update करें (या कुछ न करें)। यह सामान्य "insert-या-update" ज़रूरत को atomically संभालता है।
वह समस्या जिसे UPSERT हल करता है
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)
