使用继承创建的外国 table 卡住了

Foreign table created with inherits stuck

我一直在尝试在我的 PSQL 数据库中创建一个 foreign table。这里的重点是连接来自 2 个不同数据库的相同 steps table。我想使用 INHERITS 来复制架构。

我在本地有一个 steps table,在我的 cache_server 上有一个 steps table(有数百万行)。我试图用以下方法创建外国 table:

CREATE FOREIGN TABLE cache_steps  ()
INHERITS (steps)
SERVER cache_server 
OPTIONS ( schema_name 'public', table_name 'steps');

问题是当我这样做时,本地步骤 table 变得不可用,没有锁定但它会永远加载,我无法对这个table。我不明白为什么这种继承对我的 steps table.

有任何影响

如果我使用架构而不是 inherits 创建我的外部 table,一切正常

CREATE FOREIGN TABLE cache_steps  (
    column1 text,
    column2 text
)
SERVER cache_server 
OPTIONS ( schema_name 'public', table_name 'steps')

INHERITS 不会复制架构 本身 。相反,它允许您以某种方式构建数据,以防止数据库中常见的 'issues' 继承:

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

使用 INHERITS,Posgres 的引擎负责为您重新加载数据,因此当您查询数据时,看起来您的所有 child 数据都在同一个地方,但实际上它是散布到单独的 table 中,每个都包含一个 child type 的数据,而 parent 只剩下特定于 parents.

的数据

所以在你的情况下,你的本地步骤 table 没有任何列,因此看起来像你 'inherited schema' 但实际上不是。

您的 table 似乎卡住了,只是因为它从远程服务器加载了数百万行,因此,根据网络状况和您的查询,它可能需要很长时间才能完成return.

进一步阅读参考:https://www.postgresql.org/docs/12/tutorial-inheritance.html