PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Открийте дали редът е актуализиран или вмъкнат

Можете да погледнете системната колона xmax да кажа разликата. Това е 0 за вмъкнатите редове в този случай.

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;

Това се основава на недокументирани детайли за внедряване, които може да се променят в бъдещи издания (дори и малко вероятно). Работи за Postgres 9.5 и 9.6.

Красотата на това:не е необходимо да въвеждате допълнителни колони.

Подробно обяснение:

  • PostgreSQL Upsert разграничава вмъкнатите и актуализираните редове с помощта на системни колони XMIN, XMAX и други



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ново в PostgreSQL 12:Генерирани колони

  2. SQL Between клауза с колони с низове

  3. Вземете дърво родители + деца с pg-promise

  4. Мащабиране на връзките в PostgreSQL с помощта на пул на връзки

  5. Как да изброите таблици в текущата база данни с помощта на PostgreSQL