我一直在尝试在我的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
表中 - 从
child
到parent
的外键(例如Dog.AnimalID->Animal.Id( - 一个包含所有内容(
parents
和所有类型的children
(的大表
使用INHERITS
,Posgres的引擎负责为您重新整理数据,因此在查询时,看起来您的所有child
数据都在同一个位置,但实际上它被分散到各个表中,每个表都包含一个child type
的数据,而parent
只剩下parents
特有的数据。
因此,在您的情况下,本地步骤表没有任何列,因此看起来像是"继承的模式",但实际上不是。
您的表似乎被卡住了,只是因为它正在从远程服务器加载数百万行,因此,根据网络条件和查询,返回时间过长可能是很正常的。
进一步阅读参考:https://www.postgresql.org/docs/12/tutorial-inheritance.html