Bạn có thể nhìn vào cột hệ thống xmax
để nói sự khác biệt. Đó là 0
cho các hàng được chèn trong trường hợp này.
CREATE TABLE tbl(id int PRIMARY KEY, col int);
INSERT INTO tbl VALUES (1, 1);
INSERT INTO tbl(id, col)
VALUES (1,11), (2,22)
ON CONFLICT (id) DO UPDATE
SET col = EXCLUDED.col
RETURNING *, (xmax = 0) AS inserted;
Điều này được xây dựng dựa trên một chi tiết triển khai không có tài liệu có thể thay đổi trong các bản phát hành trong tương lai (ngay cả khi không chắc). Nó hoạt động cho Postgres 9.5 và 9.6.
Cái hay của nó:bạn không cần phải giới thiệu thêm các cột.
Giải thích chi tiết:
- PostgreSQL Upsert phân biệt các hàng được chèn và cập nhật bằng cách sử dụng các cột hệ thống XMIN, XMAX và các cột khác