PostgreSQL数据仓库中分区事实表中主键的最佳实践

mw3dktmi  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(191)

我正在寻求关于在使用PostgreSQL时在数据仓库中实现分区表的最佳实践的建议。我目前的理解是,通过时间戳列time对事实表进行分区是有意义的,因为分析查询通常通过时间间隔进行过滤。从语义上讲,将event_id作为主键是正确的。然而,PostgreSQL要求在主键或唯一约束中包含分区列,导致错误:

ERROR: unique constraint on partitioned table must include all partitioning columns
DETAIL: PRIMARY KEY constraint on table "earthquake_events" lacks column "time" which is part of the partition key.

字符串
如果我选择创建一个包含event_idtime的复合主键,我将面临一个新的问题,即维度表不能只引用事实表中的event_id,因为缺少匹配给定键的唯一约束:

ERROR: there is no unique constraint matching given keys for referenced table "earthquake_events"


这个约束将迫使我创建复合外键,在众多的维度表中同时包含event_idtime,这在语义上似乎是不正确的,而且过于复杂。
在使用PostgreSQL的DWH中设计主键和引用已分区事实表中的外键的推荐方法是什么?是否有更好的方法来维护主键的语义完整性,同时还遵守PostgreSQL的分区要求?
谢谢你的见解。

dgjrabp2

dgjrabp21#

在数据仓库中进行操作的正确方法是 * 不要 * 创建外键。数据来自保证引用完整性的事务数据库,ETL过程不应该搞砸。外键不仅不能很好地与分区表一起工作,还会在一定程度上减慢数据加载。

相关问题