PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wykryj, czy wiersz został zaktualizowany lub wstawiony

Możesz spojrzeć na kolumnę systemową xmax odróżnić. To 0 w tym przypadku dla wstawionych wierszy.

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;

Opiera się to na nieudokumentowanych szczegółach implementacji, które mogą ulec zmianie w przyszłych wydaniach (nawet jeśli jest to mało prawdopodobne). Działa z Postgresem 9.5 i 9.6.

Piękno tego:nie musisz wprowadzać dodatkowych kolumn.

Szczegółowe wyjaśnienie:

  • PostgreSQL Upsert rozróżnia wstawione i zaktualizowane wiersze za pomocą kolumn systemowych XMIN, XMAX i innych



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Używanie wielu schematów PostgreSQL z modelami Rails

  2. Praskie spotkanie PostgreSQL

  3. Odpowiednik PostgreSQL dla TOP n WITH TIES:LIMIT z powiązaniami?

  4. PostgreSQL wybiera najnowszy wpis dla danego identyfikatora

  5. Jak cicho zainstalować Postgresql w Ubuntu przez. Plik Dockera?