Tôi nhận được lỗi sau khi làm các loại sau đây của chèn:Không duy nhất hoặc loại trừ chế phù hợp với ON XUNG ĐỘT
Query:
INSERT INTO accounts (type, person_id) VALUES ('PersonAccount', 1) ON
CONFLICT (type, person_id) WHERE type = 'PersonAccount' DO UPDATE SET
updated_at = EXCLUDED.updated_at RETURNING *
Lỗi:
SQL execution failed (Reason: ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification)
tôi cũng có một INDEX duy nhất:
CREATE UNIQUE INDEX uniq_person_accounts ON accounts USING btree (type,
person_id) WHERE ((type)::text = 'PersonAccount'::text);
Vấn đề là đôi khi nó hoạt động, nhưng không phải mọi lúc. Tôi ngẫu nhiên nhận được ngoại lệ đó, điều này thực sự lạ. Dường như nó không thể truy cập vào đó INDEX hoặc nó không biết nó tồn tại.
Bất kỳ đề xuất nào?
Tôi đang sử dụng PostgreSQL 9.5.5.
Ví dụ trong khi thực hiện các mã mà cố gắng để tìm hoặc tạo một tài khoản:
INSERT INTO accounts (type, person_id, created_at, updated_at) VALUES ('PersonAccount', 69559, '2017-02-03 12:09:27.259', '2017-02-03 12:09:27.259') ON CONFLICT (type, person_id) WHERE type = 'PersonAccount' DO UPDATE SET updated_at = EXCLUDED.updated_at RETURNING *
SQL execution failed (Reason: ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification)
Trong trường hợp này, tôi chắc chắn rằng tài khoản không tồn tại. Hơn nữa, nó không bao giờ xuất ra lỗi khi người đó đã có tài khoản. Vấn đề là, trong một số trường hợp, nó cũng hoạt động nếu chưa có tài khoản. Truy vấn hoàn toàn giống nhau.
có lẽ bởi vì nó là một phần index .. –
bạn có thể xây dựng? –
@VaoTsun chỉ mục một phần được hỗ trợ bởi 'ON CONFLICT' – pozs