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

V klauzuli ON CONFLICT použijte více konfliktů_cíl

ON CONFLICT vyžaduje jedinečný index* pro detekci konfliktu. Takže stačí vytvořit jedinečný index pro oba sloupce:

t=# create table t (id integer, a text, b text);
CREATE TABLE
t=# create unique index idx_t_id_a on t (id, a);
CREATE INDEX
t=# insert into t values (1, 'a', 'foo');
INSERT 0 1
t=# insert into t values (1, 'a', 'bar') on conflict (id, a) do update set b = 'bar';
INSERT 0 1
t=# select * from t;
 id | a |  b  
----+---+-----
  1 | a | bar

* Kromě jedinečných indexů můžete také použít omezení vyloučení. Tato omezení jsou o něco obecnější než jedinečná. Předpokládejme, že tabulka obsahuje sloupce pro id a valid_time (a valid_time je tsrange ) a chtěli jste povolit duplicitní id s, ale ne pro překrývající se časová období. Jedinečné omezení vám nepomůže, ale s omezením vyloučení můžete říci „vyloučit nové záznamy, pokud jejich id rovná se starému id a také jejich valid_time překrývá jeho valid_time ."



  1. JDBC SQLServerException:Tento ovladač není nakonfigurován pro integrované ověřování.

  2. Jak předat XML jako parametr do uložené procedury v Oracle

  3. Přidejte se ke mně se speciálním hostem Michalem Barem z týmu MS Access!

  4. při vložení perského znaku do Oracle db vidím otazník