我在 postgresql 中有一个项目可以从多个模式创建一个 DWH。模式具有相同的结构(表、约束)。我被这个问题困住了:我将在 DWH 中使用的所有模式中都有一个表“员工”。schema1 表雇员中的第一个条目是 1 John Dow,schema2 表雇员中的第一个条目是 1 Mary Jane(id 列是自动递增的)。有没有办法用这种结构创建 DWH?有没有办法对模式数据进行分区?谢谢你。
最简单的方法可能是分配密钥的一些最高有效位以成为源 ID,从而使您的密钥在所有源数据库中都是唯一的。例如,假设您存储的数据库永远不会超过 100 个,因此 7 位数据库标识符就足够了。
INTEGER
(32 位)密钥将剩余 24 位,最多允许插入 16777215 次,BIGINT
(64 位)密钥将剩余 56 位,最多允许插入 72057594037927935 次。(请注意,这ALTER TABLE ... ALTER COLUMN SET DATA TYPE
需要全表重写,对于大容量表可能会非常慢。)DB_ID << 24
(对于 32 位键)或DB_ID << 56
(对于 64 位键)。例如,对于 ID 为 13 和 32 位键的数据库,您需要将 218103808 添加到每个键值。CHECK CONSTRAINT
s添加到每个表,确保它们的键在范围内[(DB_ID << 24) + 1, ((DB_ID+1) << 24) - 1]
。ALTER SEQUENCE :seq_name MINVALUE :min_val MAXVALUE :max_val START WITH :start_val RESTART WITH :start_val
,其中min_val = (DB_ID << 24) + 1
,max_val = ((DB_ID+1) << 24) - 1
和start_val = currval(SEQUENCE_NAME)
。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句