外部表可以与本地表同名吗?
Posted
技术标签:
【中文标题】外部表可以与本地表同名吗?【英文标题】:Can a foreign table have same name as a local table? 【发布时间】:2018-02-26 11:51:13 【问题描述】:我的问题是我正在使用 PostgreSQL 数据库并想从其他数据库导入一个名为 vfm
的表,例如 B
。但是我当前的数据库中有一个同名的表(A
)。我的查询中出现错误,提示该关系已存在。
我想知道是否有办法将外部模式导入到具有其他名称的表中,或者(最好)我们是否可以直接查询另一个数据库而不将外部模式导入 PostgreSQL?
我还没有找到完美的解决方案。
【问题讨论】:
您应该能够指定目标表的名称,但这取决于您将数据引入的方式。 我不是 postgres 专家,但我知道在 mysql 中,您可以在表名之前指定数据库名,使用点表示法:mydatabase.mytable。你在 postgresql 中寻找过类似的东西吗? @senape 我知道 mysql 但遗憾的是我们不能在 postgres 中这样做 MySQL 所谓的“数据库”实际上是一个模式。您可以将外部表放入 Postgres 中的不同模式中 @GordonLinoff 如果我创建一个不同的表并将我的外部表导入其中,它会在其父数据库中更改时更新吗? 【参考方案1】:我假设您使用的是postgres_fdw;对于其他外国数据包装器,情况略有不同。
不用IMPORT FOREIGN SCHEMA
也可以轻松定义外部表。
如果架构名称是myschema
,表名称是vfm
,外部服务器是serv
,你可以
CREATE FOREIGN TABLE myschema.vfm_2(col1, type1, ...)
SERVER serv
OPTIONS (schema_name 'myschema', table_name 'vfm');
【讨论】:
我认为这会有所帮助。谢谢!【参考方案2】:另一种选择是将表加载到不同的架构,例如
CREATE SCHEMA foreign_data;
IMPORT FOREIGN SCHEMA public LIMIT TO (customers) FROM SERVER serv INTO foreign_data;
【讨论】:
以上是关于外部表可以与本地表同名吗?的主要内容,如果未能解决你的问题,请参考以下文章
GreenPlum数据的装载与卸载之外部表以及gpfdist工具的使用