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

Không có ràng buộc duy nhất hoặc loại trừ nào phù hợp với MỨC ĐỘ BẬT

Theo tài liệu,

Tất cả các chỉ mục duy nhất của tên_bảng, không liên quan đến thứ tự, chứa chính xác các cột / biểu thức do mục tiêu chỉ định được suy ra (được chọn) dưới dạng arbiterindexes. Nếu một index_predicate được chỉ định, nó phải đáp ứng các chỉ mục trọng tài như một yêu cầu khác để suy luận.

Các tài liệu tiếp tục nói,

[index_predicate are u] sed cho phép suy luận các chỉ mục duy nhất một phần

Nói một cách ngắn gọn, các tài liệu nói rằng khi sử dụng chỉ mục một phần và uperting bằng ON CONFLICT, thì index_predicate phải được chỉ định . Nó không được giới thiệu cho bạn. Tôi đã học được điều này ở đây và ví dụ sau đây chứng minh điều này.

CREATE TABLE test.accounts (
    id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
    type text,
    person_id int);
CREATE UNIQUE INDEX accounts_note_idx on accounts (type, person_id) WHERE ((type)::text = 'PersonAccount'::text);
INSERT INTO  test.accounts (type, person_id) VALUES ('PersonAccount', 10);

để chúng tôi có:

unutbu=# select * from test.accounts;
+----+---------------+-----------+
| id |     type      | person_id |
+----+---------------+-----------+
|  1 | PersonAccount |        10 |
+----+---------------+-----------+
(1 row)

Không có index_predicate chúng tôi gặp lỗi:

INSERT INTO  test.accounts (type, person_id) VALUES ('PersonAccount', 10) ON CONFLICT (type, person_id) DO NOTHING;
-- ERROR:  there is no unique or exclusion constraint matching the ON CONFLICT specification

Nhưng nếu thay vào đó, bạn bao gồm index_predicate, WHERE ((type)::text = 'PersonAccount'::text) :

INSERT INTO  test.accounts (type, person_id) VALUES ('PersonAccount', 10)
ON CONFLICT (type, person_id)
WHERE ((type)::text = 'PersonAccount'::text) DO NOTHING;

thì không có lỗi và KHÔNG CÓ GÌ được tôn trọng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bạn có thể tạo chỉ mục trong định nghĩa TẠO BẢNG không?

  2. Làm cách nào để thực thi tính duy nhất giống tập hợp giữa nhiều cột?

  3. Cách make_time () hoạt động trong PostgreSQL

  4. múi giờ mặc định của postgres

  5. Cách sử dụng Mô hình học máy KNN với 2UDA - PostgreSQL và Orange (Phần 1)