如何保证PostgreSQL表中聚合数据的准确性?
我有两个PostgreSQL表-表A包含个别客户的信贷变动记录(增加/减少),表B包含汇总表A的数据。表的简化结构(我删除了FK和规则): 列“信用审查汇总。有效的审查id”是FK到“信用审查.id” 因为正确地保存聚合表中的数据非常重要,所以我正在寻找一种确保这种需要的方法。我突然想到:如何保证PostgreSQL表中聚合数据的准确性?,postgresql,aggregate,Postgresql,Aggregate,我有两个PostgreSQL表-表A包含个别客户的信贷变动记录(增加/减少),表B包含汇总表A的数据。表的简化结构(我删除了FK和规则): 列“信用审查汇总。有效的审查id”是FK到“信用审查.id” 因为正确地保存聚合表中的数据非常重要,所以我正在寻找一种确保这种需要的方法。我突然想到: 禁用删除和自定义两个表中的记录 在聚合表上创建触发器,检查输入的数据是否正确(如果不正确,则不允许插入)。我不太喜欢它,因为当一条记录被插入到聚合表中时,credit_amount值将被计数两次(一次在应用程
您有什么建议可以帮助我确保这种情况吗?我不完全清楚您试图强制执行的不变量,但从问题的总体概述来看,我倾向于使用触发器代码强制执行它,并使用可序列化事务。否则,在多个表之间强制执行不变量会变得非常棘手 充分披露:因为我的雇主需要在多个表之间实施复杂的完整性规则,我与麻省理工学院的Dan R.K.Ports一起致力于将SSI添加到PostgreSQL
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;