PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Gunakan beberapa konflik_target dalam klausa ON CONFLICT

ON CONFLICT membutuhkan indeks* unik untuk melakukan deteksi konflik. Jadi Anda hanya perlu membuat indeks unik di kedua kolom:

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

* Selain indeks unik, Anda juga dapat menggunakan batasan pengecualian. Ini sedikit lebih umum daripada batasan unik. Misalkan tabel Anda memiliki kolom untuk id dan valid_time (dan valid_time adalah tsrange ), dan Anda ingin mengizinkan duplikat id s, tetapi tidak untuk periode waktu yang tumpang tindih. Batasan unik tidak akan membantu Anda, tetapi dengan batasan pengecualian, Anda dapat mengatakan "kecualikan catatan baru jika id mereka sama dengan id lama dan juga valid_time their tumpang tindih dengan 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. Rencana Kueri Postgres mengapa estimasi Baris sangat salah

  2. Fungsi PL/pgSQL:Cara mengembalikan tabel normal dengan banyak kolom menggunakan pernyataan eksekusi

  3. Bagaimana cara memigrasi Tabel Postgres yang ada ke tabel yang dipartisi setransparan mungkin?

  4. Baca Berkomitmen adalah suatu keharusan untuk database SQL terdistribusi yang kompatibel dengan Postgres

  5. Bagaimana mengatasi masalah hak istimewa saat memulihkan Database PostgreSQL