【问题标题】:How to ensure the accuracy of aggregated data in PostgreSQL table?如何保证PostgreSQL表中聚合数据的准确性?
【发布时间】:2012-10-30 00:38:54
【问题描述】:

我有两个 PostgreSQL 表 - 表 A 包含单个客户的信贷变动记录(增加/减少),表 B 包含聚合表 A 的数据。表的简化结构(我删除了 FK 和规则):

CREATE TABLE "public"."credit_review" (
      "id" SERIAL, 
      "client_id" INTEGER NOT NULL, 
      "credit_change" INTEGER DEFAULT 0 NOT NULL, 
      "itime" TIMESTAMP(0) WITH TIME ZONE DEFAULT now()
) WITHOUT OIDS;

CREATE TABLE "public"."credit_review_aggregated" (
  "id" SERIAL, 
  "credit_amount" INT DEFAULT 0 NOT NULL, 
  "valid_to_review_id" INT NOT NULL, 
  "client_id" INTEGER NOT NULL, 
  "itime" TIMESTAMP(0) WITH TIME ZONE DEFAULT now()
) WITHOUT OIDS;

列“credit_review_aggregated.valid_to_review_id”是“credit_review.id”的FK。

因为聚合表中的数据正确非常重要,所以我正在寻找一种方法来确保这种需求。我突然想到:

  1. 禁用删除和更新两个表中的记录
  2. 在聚合表上创建触发器以检查输入的数据是否正确(如果不正确,则不允许插入)。我不太喜欢它,因为当一条记录插入聚合表时,credit_amount 值将被计算两次(一次在应用程序中,第二次在触发器中)。

您对我如何确保这种情况有什么建议吗?

【问题讨论】:

    标签: postgresql aggregate


    【解决方案1】:

    我并不完全清楚您要强制执行的不变量,但从问题的一般轮廓来看,我倾向于使用触发代码来执行它,并使用 SERIALIZABLE 事务。否则,在多个表中强制执行不变量很快就会变得非常棘手。

    http://wiki.postgresql.org/wiki/SSI

    完全披露:因为我的雇主需要跨多个表强制执行复杂的完整性规则,我与 Dan R.K. 一起致力于将 SSI 添加到 PostgreSQL。麻省理工的港口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-30
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      • 2020-03-09
      • 2010-10-30
      • 2019-12-04
      • 2016-06-19
      相关资源
      最近更新 更多