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

Użyj wielu konfliktów_docelowych w klauzuli ON CONFLICT

ON CONFLICT wymaga unikalnego indeksu* do wykrywania konfliktów. Wystarczy więc utworzyć unikalny indeks w obu kolumnach:

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

* Oprócz unikalnych indeksów możesz również użyć ograniczeń wykluczenia. Są to nieco bardziej ogólne niż unikalne ograniczenia. Załóżmy, że Twoja tabela zawiera kolumny dla id i valid_time (i valid_time jest tsrange ) i chciałeś zezwolić na zduplikowanie id s, ale nie dla nakładających się okresów. Unikalne ograniczenie ci nie pomoże, ale z ograniczeniem wykluczenia możesz powiedzieć „wyklucz nowe rekordy, jeśli ich id równa się staremu id a także ich valid_time nakłada się na swój valid_time ”.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres kolumna X nie istnieje

  2. Utwórz kopię zapasową PostgreSQL za pomocą pg_dump i pg_dumpall

  3. Programista Oracle SQL i PostgreSQL

  4. Dlaczego zapytanie nie zapisuje się w pliku csv, podczas gdy w konsoli postgresql wygląda to normalnie?

  5. Buforowanie w PostgreSQL