首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用PostgreSQL执行跨数据库查询?

是否可以使用PostgreSQL执行跨数据库查询?
EN

Stack Overflow用户
提问于 2008-09-05 17:09:14
回答 8查看 261.5K关注 0票数 170

根据下面的错误消息(和this Google result),我猜答案是“否”,但是有没有办法使用PostgreSQL执行跨数据库查询呢?

代码语言:javascript
复制
databaseA=# select * from databaseB.public.someTableName;
ERROR:  cross-database references are not implemented:
 "databaseB.public.someTableName"

我正在处理一些跨两个数据库分区的数据,尽管数据实际上是在这两个数据库之间共享的(一个数据库中的userid列来自另一个数据库中的users表)。我不知道为什么这是两个独立的数据库,而不是模式,但请注意……

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-09-05 18:10:20

注意:正如最初的提问者所暗示的那样,如果您在同一台机器上设置两个数据库,您可能希望创建两个 -在这种情况下,您不需要任何特殊的东西来跨它们进行查询。

postgres_fdw

使用postgres_fdw (外部数据包装器)连接到任何Postgres数据库中的表-本地或远程。

请注意,这里有foreign data wrappers for other popular data sources。目前,只有postgres_fdwfile_fdw是官方Postgres发行版的一部分。

对于9.3之前的Postgres版本

这种旧版本不再受支持,但如果你需要在2013年前的Postgres安装中执行此操作,有一个名为dblink的函数。

我从未使用过它,但它是与PostgreSQL的其余部分一起维护和分发的。如果您使用的是Linux发行版附带的PostgreSQL版本,则可能需要安装一个名为postgresql-contrib的包。

票数 135
EN

Stack Overflow用户

发布于 2014-11-21 12:29:37

dblink() --在远程数据库中执行查询

SQL在远程数据库中执行查询(通常是SELECT,但也可以是任何返回行的

语句)。

当给定两个文本参数时,首先将第一个作为持久连接的名称进行查找;如果找到,则在该连接上执行命令。如果未找到,第一个参数将被视为连接信息字符串,就像dblink_connect一样,并且指示的连接仅在此命令的持续时间内建立。

其中一个很好的例子是:

代码语言:javascript
复制
SELECT * 
FROM   table1 tb1 
LEFT   JOIN (
   SELECT *
   FROM   dblink('dbname=db2','SELECT id, code FROM table2')
   AS     tb2(id int, code text);
) AS tb2 ON tb2.column = tb1.column;

注意:我提供此信息以供将来参考。Refrence

票数 42
EN

Stack Overflow用户

发布于 2008-09-05 17:17:56

在我对跨数据库查询得出与您相同的结论之前,我已经遇到过这种情况。我最终所做的是使用模式来划分表空间,这样我就可以保持表的分组,但仍然可以查询所有表。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档