小编Ser*_*rta的帖子

PostgreSQL Upsert 不适用于分区表

有一张这样的表:

CREATE TABLE aggregated_master (
  "user"       BIGINT,
  type         TEXT,
  date         TIMESTAMP,
  operations   BIGINT,
  amount       NUMERIC,
  PRIMARY KEY ( "user", type, date )
);
Run Code Online (Sandbox Code Playgroud)

这张表是很多分区继承的主表。分区由 DATE 字段中的 MONTH 完成。例如:2017 年 8 月的分区将是 agg_201708,它的 PK 将是 pk_agg_201708 在插入之前通常会触发将插入重定向到正确的分区。

问题是我想在这个表中做一个 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
Run Code Online (Sandbox Code Playgroud)

但是后来我注意到约束 …

postgresql plpgsql upsert

10
推荐指数
2
解决办法
5367
查看次数

标签 统计

plpgsql ×1

postgresql ×1

upsert ×1