gpt4 book ai didi

postgresql - 来自多个模式的 DWH

转载 作者:行者123 更新时间:2023-11-29 13:48:44 24 4
gpt4 key购买 nike

我在 postgresql 中有一个项目,用于从多个模式创建 DWH。模式具有相同的结构(表、约束)。我被困在这个问题上:我将在 DWH 中使用的所有模式中都有一个表“employees”。 schema1 表 employees 中的第一个条目是 1 John Dow,schema2 表 employees 中的第一个条目是 1 Mary Jane(id 列是自动递增的)。有没有办法用这种结构创建 DWH?有没有办法对模式数据进行分区?谢谢。

最佳答案

最简单的方法可能是将 key 的一些最高有效位分配为源 ID,从而使您的 key 在所有源数据库中都是唯一的。例如。假设您存储的数据库永远不会超过 100 个,因此 7 位数据库标识符就足够了。

  1. 确保数据库中所有具有连续整数主键或引用这些主键的外键的表都使用相同的数据类型。此数据类型必须足够大以在不触及最高有效 8 位的情况下保存任何表中所有行的值。所以INTEGER (32 位) key 将保留 24 位剩余,允许最多 16777215 次插入,并且 BIGINT (64 位) key 将保留 56 位剩余,最多允许 72057594037927935 次插入。 (注意 ALTER TABLE ... ALTER COLUMN SET DATA TYPE 需要全表重写,对于大容量表来说可能非常慢。)
  2. 为每个数据库分配一个唯一的 7 位数据库标识符,该标识符将占据每个键的最高 8 位。你只能得到 7 位,而不是 8 位,因为最高位是签名位,你不能碰它。
  3. 对于数据库中引用它的每个整数主键和外键,更新它,添加 DB_ID << 24 (对于 32 位 key )或 DB_ID << 56 (对于 64 位 key )。例如。对于具有 ID 13 和 32 位键的数据库,您需要将 218103808 添加到每个键值。
  4. 可以选择添加 CHECK CONSTRAINT s 到每个表,确保它们的键在 [(DB_ID << 24) + 1, ((DB_ID+1) << 24) - 1] 范围内.
  5. 使用以下命令重新启动每个表的 PK 序列: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) .

关于postgresql - 来自多个模式的 DWH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44357319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com