PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Sử dụng nhiều mục tiêu xung đột trong mệnh đề ON CONFLICT

ON CONFLICT yêu cầu một chỉ mục duy nhất * để phát hiện xung đột. Vì vậy, bạn chỉ cần tạo một chỉ mục duy nhất trên cả hai cột:

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

* Ngoài các chỉ mục duy nhất, bạn cũng có thể sử dụng các ràng buộc loại trừ. Đây là những ràng buộc chung chung hơn một chút so với các ràng buộc duy nhất. Giả sử bảng của bạn có các cột cho idvalid_time (và valid_time là một tsrange ) và bạn muốn cho phép id trùng lặp s, nhưng không phải đối với các khoảng thời gian trùng lặp. Một ràng buộc duy nhất sẽ không giúp bạn, nhưng với một ràng buộc loại trừ, bạn có thể nói "loại trừ các bản ghi mới nếu id của chúng bằng một id cũ và cả valid_time của họ chồng lên valid_time của nó . "



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giá trị NULL của hàm Postgres cho hàng tham chiếu MỚI

  2. Tạo trình tự theo thứ tự

  3. Tổng hợp một cột duy nhất trong truy vấn với nhiều cột

  4. Cách liệt kê các bảng trong cơ sở dữ liệu hiện tại bằng PostgreSQL

  5. Django + Psycopg2:InterfaceError:chỉ hỗ trợ giao thức 3