Tenha uma tabela como esta:
CREATE TABLE aggregated_master (
"user" BIGINT,
type TEXT,
date TIMESTAMP,
operations BIGINT,
amount NUMERIC,
PRIMARY KEY ( "user", type, date )
);
Esta tabela é o mestre do qual muitas partições são herdadas. As partições são feitas por MONTH no campo DATE. Por exemplo: A partição para agosto de 2017 seria agg_201708 e a PK seria pk_agg_201708 Há o gatilho usual ANTES DE INSERIR para redirecionar a inserção para a partição apropriada.
A questão é que eu quero fazer um UPSERT nesta tabela. A parte DO CONFLICT não está funcionando.
O código primeiro era assim
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
Mas notei que a restrição (pk_aggregated) é a da tabela mestre, e não da tabela filha em que a inserção será realmente executada, devido ao gatilho.
Alterei a cláusula CONFLICT para:
ON CONFLICT (user, type, date)
Quais são os campos do PK, mas isso também não funciona.
Alguma idéia de como fazer isso funcionar?