gpt4 book ai didi

postgresql - 使用继承卡创建的外部表

转载 作者:行者123 更新时间:2023-12-04 08:34:00 25 4
gpt4 key购买 nike

我一直在尝试创建一个 foreign table在我的 PSQL 数据库中。这里的重点是连接相同的 steps来自 2 个不同数据库的表。我想用INHERITS复制架构。
我有一个 steps本地表和 steps我的 cache_server 上的表(有数百万行) .我试图用以下方法创建外部表:

CREATE FOREIGN TABLE cache_steps  ()
INHERITS (steps)
SERVER cache_server
OPTIONS ( schema_name 'public', table_name 'steps');
问题是当我这样做时, 本地步数表变得不可用,没有锁,但它永远加载,我不能对这张表做任何请求。我不明白为什么这个继承对我的 steps 有任何影响 table 。
如果我使用架构而不是 inherits 创建我的外部表,一切正常
CREATE FOREIGN TABLE cache_steps  (
column1 text,
column2 text
)
SERVER cache_server
OPTIONS ( schema_name 'public', table_name 'steps')

最佳答案

INHERITS不复制模式本身。相反,它允许您以某种方式构建数据,以防止数据库中常见的继承“问题”:

  • 重复数据:parent的数据存在于每个 child 中表
  • 来自 child 的外键至 parent (例如 Dog.AnimalID -> Animal.Id)
  • 一张大 table ,里面放着所有东西( parents 和所有类型的 children)

  • INHERITS , Posgres 的引擎负责为您重新整理数据,所以看起来您拥有所有的 child当您查询数据时,数据在同一个地方,但实际上它分布在单独的表中,每个表都包含一个 child type的数据和 parent只留下特定于 parents 的数据.
    因此,在您的情况下,您的本地步骤表没有任何列,因此看起来像是“继承架构”,但实际上并非如此。
    您的表似乎卡住了,因为它正在从远程服务器加载数百万行,因此根据网络条件和您的查询,它需要很长时间才能返回是很正常的。
    进一步阅读引用: https://www.postgresql.org/docs/12/tutorial-inheritance.html

    关于postgresql - 使用继承卡创建的外部表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64890795/

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