外部表可以与本地表同名吗?

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工具的使用

Azure Synapse Polybase/外部表 - 我们可以在创建外部表时从文件中获取行号吗

外部表性能的小文件与大文件

Clickhouse 外部表本地表副本表和分布式表

MySQL中的两种临时表

在body中间引入css外部样式表和js代码,这样可以吗