UPSERT = "update nếu đã có, insert nếu chưa".
Trong PostgreSQL viết bằng INSERT ... ON CONFLICT: khi câu insert đụng một unique constraint/index, bạn bảo nó update thay vì báo lỗi (hoặc bỏ qua).
sql
INSERT INTO users (email, name)
VALUES ('a@example.com', 'Ada')
ON CONFLICT (email) DO UPDATE
SET name = EXCLUDED.name;EXCLUDEDlà dòng đáng lẽ được insert.- Cần chỉ rõ cột gây xung đột (conflict target).
- Với logic phức tạp, để ý race condition, trigger phụ và việc cập nhật
updated_at.