使用创建的外部表继承了已卡住的表



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

我在本地有一个steps表,在我的cache_server上有一个有数百万行的steps表。我尝试用创建外部表

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

问题是,当我这样做时,本地步骤表变得不可用,没有锁,但它永远加载,我不能对此表执行任何请求。我不明白为什么这种继承会对我的steps表产生任何影响。

如果我用模式而不是inherits创建外部表,那么一切都很好

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

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

  • 数据重复:parent的数据存在于每个child表中
  • childparent的外键(例如Dog.AnimalID->Animal.Id(
  • 一个包含所有内容(parents和所有类型的children(的大表

使用INHERITS,Posgres的引擎负责为您重新整理数据,因此在查询时,看起来您的所有child数据都在同一个位置,但实际上它被分散到各个表中,每个表都包含一个child type的数据,而parent只剩下parents特有的数据。

因此,在您的情况下,本地步骤表没有任何列,因此看起来像是"继承的模式",但实际上不是。

您的表似乎被卡住了,只是因为它正在从远程服务器加载数百万行,因此,根据网络条件和查询,返回时间过长可能是很正常的。

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

相关内容

  • 没有找到相关文章

最新更新