Có một bảng như thế này:
CREATE TABLE aggregated_master (
"user" BIGINT,
type TEXT,
date TIMESTAMP,
operations BIGINT,
amount NUMERIC,
PRIMARY KEY ( "user", type, date )
);
Bảng này là chủ từ đó rất nhiều phân vùng kế thừa. Các phân vùng được thực hiện bởi MONTH trong trường DATE. Ví dụ: Phân vùng cho tháng 8 năm 2017 sẽ là agg_201708 và PK của nó sẽ là pk_agg_201708 Có một trình kích hoạt thông thường TRƯỚC KHI CHỌN để chuyển hướng chèn vào phân vùng thích hợp.
Có điều là tôi muốn thực hiện một UPSERT vào bảng này. Phần DO CONFLICT không hoạt động.
Mã đầu tiên là như thế này
INSERT INTO aggregated_master (user, type, date, oeprations, amount)
SELECT user, type, date, SUM(ops), SUM(amt)
FROM ...
WHERE ...
GROUP BY USER, TYPE, DATE
ON CONFLICT ON CONSTRAINT pk_aggregated
DO UPDATE SET operations = EXCLUDED.operations
, amount = EXCLUDED.amount
Nhưng sau đó tôi nhận thấy rằng ràng buộc (pk_aggregated) là ràng buộc trên bảng chính, chứ không phải trên bảng con nơi chèn sẽ thực sự được thực hiện, do kích hoạt.
Tôi đã thay đổi mệnh đề CONFLICT thành:
ON CONFLICT (user, type, date)
Đó là các lĩnh vực của PK, nhưng điều này cũng không hoạt động.
Bất kỳ ý tưởng làm thế nào để làm cho công việc này?