次のようなテーブルがあります。
CREATE TABLE aggregated_master (
"user" BIGINT,
type TEXT,
date TIMESTAMP,
operations BIGINT,
amount NUMERIC,
PRIMARY KEY ( "user", type, date )
);
このテーブルは、多くのパーティションが継承するマスターです。パーティションは、DATEフィールドのMONTHによって行われます。たとえば、Aug-2017のパーティションはagg_201708で、そのPKはpk_agg_201708になります。挿入を適切なパーティションにリダイレクトする通常のトリガーBEFORE INSERTがあります。
事は私がこのテーブルにUPSERTをしたいということです。DO CONFLICT部分が機能していません。
最初のコードはこのようなものでした
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
しかしその後、制約(pk_aggregated)がマスターテーブルの制約であり、トリガーが原因で実際に挿入が実行される子テーブルの制約ではないことに気付きました。
CONFLICT句を次のように変更しました。
ON CONFLICT (user, type, date)
これはPKのフィールドですが、これも機能しません。
これを機能させる方法はありますか?