根据下面的错误消息(和this Google result),我猜答案是“否”,但是有没有办法使用PostgreSQL执行跨数据库查询呢?
databaseA=# select * from databaseB.public.someTableName;
ERROR: cross-database references are not implemented:
"databaseB.public.someTableName"我正在处理一些跨两个数据库分区的数据,尽管数据实际上是在这两个数据库之间共享的(一个数据库中的userid列来自另一个数据库中的users表)。我不知道为什么这是两个独立的数据库,而不是模式,但请注意……
发布于 2008-09-05 18:10:20
注意:正如最初的提问者所暗示的那样,如果您在同一台机器上设置两个数据库,您可能希望创建两个 -在这种情况下,您不需要任何特殊的东西来跨它们进行查询。
postgres_fdw
使用postgres_fdw (外部数据包装器)连接到任何Postgres数据库中的表-本地或远程。
请注意,这里有foreign data wrappers for other popular data sources。目前,只有postgres_fdw和file_fdw是官方Postgres发行版的一部分。
对于9.3之前的Postgres版本
这种旧版本不再受支持,但如果你需要在2013年前的Postgres安装中执行此操作,有一个名为dblink的函数。
我从未使用过它,但它是与PostgreSQL的其余部分一起维护和分发的。如果您使用的是Linux发行版附带的PostgreSQL版本,则可能需要安装一个名为postgresql-contrib的包。
发布于 2014-11-21 12:29:37
dblink() --在远程数据库中执行查询
SQL在远程数据库中执行查询(通常是SELECT,但也可以是任何返回行的
语句)。
当给定两个文本参数时,首先将第一个作为持久连接的名称进行查找;如果找到,则在该连接上执行命令。如果未找到,第一个参数将被视为连接信息字符串,就像dblink_connect一样,并且指示的连接仅在此命令的持续时间内建立。
其中一个很好的例子是:
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
发布于 2008-09-05 17:17:56
在我对跨数据库查询得出与您相同的结论之前,我已经遇到过这种情况。我最终所做的是使用模式来划分表空间,这样我就可以保持表的分组,但仍然可以查询所有表。
https://stackoverflow.com/questions/46324
复制相似问题