sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan finder man ud af, om en upsert var en opdatering med PostgreSQL 9.5+ UPSERT?

Jeg tror på xmax::text::int > 0 ville være det nemmeste trick:

so=# DROP TABLE IF EXISTS tab;
NOTICE:  table "tab" does not exist, skipping
DROP TABLE
so=# CREATE TABLE tab(id INT PRIMARY KEY, col text);
CREATE TABLE
so=# INSERT INTO tab(id, col) VALUES (1,'a'), (2, 'b');
INSERT 0 2
so=# INSERT INTO tab(id, col)
VALUES (3, 'c'), (4, 'd'), (1,'aaaa')
ON CONFLICT (id) DO UPDATE SET col = EXCLUDED.col
returning *,case when xmax::text::int > 0 then 'updated' else 'inserted' end,ctid;
 id | col  |   case   | ctid
----+------+----------+-------
  3 | c    | inserted | (0,3)
  4 | d    | inserted | (0,4)
  1 | aaaa | updated  | (0,5)
(3 rows)

INSERT 0 3
so=# INSERT INTO tab(id, col)
VALUES (3, 'c'), (4, 'd'), (1,'aaaa')
ON CONFLICT (id) DO UPDATE SET col = EXCLUDED.col
returning *,case when xmax::text::int > 0 then 'updated' else 'inserted' end,ctid;
 id | col  |  case   | ctid
----+------+---------+-------
  3 | c    | updated | (0,6)
  4 | d    | updated | (0,7)
  1 | aaaa | updated | (0,8)
(3 rows)

INSERT 0 3


  1. Tjek, om en streng indeholder en understreng i SQL Server 2005, ved hjælp af en lagret procedure

  2. Anbefalede Intel-processorer til SQL Server 2014-arbejdsbelastninger

  3. Kapacitetsplanlægning ved hjælp af ydeevnedata

  4. Hvordan konverterer jeg et heltal til streng som en del af en PostgreSQL-forespørgsel?