Postgresql 来自多个模式的DWH

Postgresql 来自多个模式的DWH,postgresql,data-warehouse,multiple-schema,Postgresql,Data Warehouse,Multiple Schema,我在postgresql中有一个从多个模式创建DWH的项目。模式具有相同的结构(表、约束)。 我陷入了这个问题:在我将在DWH中使用的所有模式中都有一个表“employees”。schema1表employees中的第一个条目是1 John Dow,schema2表employees中的第一个条目是1 Mary Jane(id列是自动递增的)。 有没有办法用这种结构创建DWH?有没有办法对模式数据进行分区? 谢谢。将主键重新计算为 <id> * <# of schemas>

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

将主键重新计算为

<id> * <# of schemas> + <schema number>
*+
例如,如果有三个模式,第一个模式中的数字7将变成7*3+1=22,第三个模式中的数字5将变成5*3+3=18


这样,您可以轻松地以无冲突的方式转换所有数字。

将主键重新计算为

<id> * <# of schemas> + <schema number>
*+
例如,如果有三个模式,第一个模式中的数字7将变成7*3+1=22,第三个模式中的数字5将变成5*3+3=18


通过这种方式,您可以轻松地以无冲突的方式转换所有数字。

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

  • 确保数据库中具有顺序整数主键或引用这些主键的外键的所有表使用相同的数据类型。此数据类型必须足够大,以便在不触及最高有效8位的情况下保存任何表上所有行的值。因此,
    INTEGER
    (32位)键将剩余24位,最多允许16777215次插入,
    BIGINT
    (64位)键将剩余56位,最多允许72057594037927935次插入。(请注意,
    ALTER TABLE…ALTER COLUMN SET DATA TYPE
    需要完全重写表,并且对于高容量表可能非常慢。)
  • 为每个数据库分配一个唯一的7位数据库标识符,该标识符将占用每个密钥的最高8位。你只能得到7位,而不是8位,因为上面的位是签名位,你不能碰它

  • 对于数据库中引用它的每个整数主键和外键,更新它,添加
    DB_ID,最简单的方法可能是将键的一些最重要位分配为源ID,从而使键在所有源数据库中都是唯一的。例如,假设您存储的数据库不会超过100个,那么7位数据库标识符就足够了

  • 确保数据库中具有顺序整数主键或引用这些主键的外键的所有表使用相同的数据类型。此数据类型必须足够大,以便在不触及最高有效8位的情况下保存任何表上所有行的值。因此,
    INTEGER
    (32位)键将剩余24位,最多允许16777215次插入,
    BIGINT
    (64位)键将剩余56位,最多允许72057594037927935次插入。(请注意,
    ALTER TABLE…ALTER COLUMN SET DATA TYPE
    需要完全重写表,并且对于高容量表可能非常慢。)
  • 为每个数据库分配一个唯一的7位数据库标识符,该标识符将占用每个密钥的最高8位。你只能得到7位,而不是8位,因为上面的位是签名位,你不能碰它

  • 对于数据库中引用它的每个整数主键和外键,更新它,添加
    DB\u ID是否有任何原因不能简单地将所有这些员工数据合并到一个表中,添加一个捕获源架构名称的字段(如果需要),然后为每个记录分配一个新Id?有什么原因不能简单地将所有员工数据合并到一个表中,添加一个捕获源架构名称的字段(如果需要),然后为每个记录分配一个新Id?谢谢您的回答。我在路上完成这件事。再次感谢你。祝你有美好的一天!谢谢你的回复。我在路上完成这件事。再次感谢你。祝你有美好的一天!谢谢你的回复。我的问题是我的模式编号是动态的。这是一个应用程序,每次客户注册我们的帐户时,应用程序都会为该客户生成一个模式。感谢您的回复。我的问题是我的模式编号是动态的。它是针对一个应用程序的,每次客户端向我们注册帐户时,该应用程序都会为该客户端生成一个模式。