sql >> Databáze >  >> RDS >> PostgreSQL

Zjistěte, zda byl řádek aktualizován nebo vložen

Můžete se podívat na systémový sloupec xmax abych poznal rozdíl. Je to 0 pro vložené řádky v tomto případě.

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;

To je založeno na nezdokumentovaných podrobnostech implementace, které se mohou v budoucích verzích změnit (i když nepravděpodobné). Funguje pro Postgres 9.5 a 9.6.

Krása toho:nemusíte zavádět další sloupce.

Podrobné vysvětlení:

  • PostgreSQL Upsert rozlišuje vložené a aktualizované řádky pomocí systémových sloupců XMIN, XMAX a dalších



  1. Jak mohu použít dotaz se zástupným symbolem uvnitř uvozovek? (perl / postgresql)

  2. Jak nainstalovat phpMyAdmin na jeho vlastní aplikaci

  3. Automaticky otevírat výsledky dotazů SQLite v Excelu

  4. Podívejte se na mou prezentaci „Optimalizace Microsoft Access pomocí SQL Serveru“.