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