PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Phát hiện xem hàng đã được cập nhật hoặc được chèn hay chưa

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có thể tắt xử lý báo giá trong lệnh Postgres COPY với định dạng CSV không?

  2. Cột PostgreSQL 'foo' không tồn tại

  3. Nhóm người dùng PostgreSQL NL

  4. Trong psql, tại sao một số lệnh không có tác dụng?

  5. Triển khai Django cho Heroku (Lỗi Psycopg2)