UPSERT dùng INSERT ... ON CONFLICT để insert nếu chưa có, hoặc update/do nothing nếu vi phạm unique constraint/index.
Ví dụ:
sql
INSERT INTO users (email, name)
VALUES ('a@example.com', 'Ada')
ON CONFLICT (email) DO UPDATE
SET name = EXCLUDED.name;UPSERT cần conflict target rõ ràng.
Với logic phức tạp, chú ý race condition, trigger side effects và updated_at semantics.