sql >> Databasteknik >  >> RDS >> PostgreSQL

Upptäck om raden har uppdaterats eller infogats

Du kan titta på systemkolumnen xmax att se skillnad. Det är 0 för infogade rader i detta fall.

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;

Detta bygger på en odokumenterad implementeringsdetalj som kan komma att ändras i framtida utgåvor (även om det är osannolikt). Det fungerar för Postgres 9.5 och 9.6.

Det fina med det:du behöver inte införa ytterligare kolumner.

Detaljerad förklaring:

  • PostgreSQL Upsert särskilja infogade och uppdaterade rader med hjälp av systemkolumnerna XMIN, XMAX och andra



  1. Assembly 'Microsoft.SqlServer.Types' version 10 eller högre kunde inte hittas

  2. Hur man dokumenterar en databas

  3. Dynamisk pivot i oracle sql - Procedur

  4. Kräver ODP.NET installation av Oracle Client