我将猜测答案是否基于以下错误消息(以及此Google结果),但无论如何使用Postgres执行跨数据库查询?
databaseA=# select * from databaseB.public.someTableName; ERROR: cross-database references are not implemented: "databaseB.public.someTableName"
我正在处理一些跨两个数据库分区的数据,尽管两者之间真的共享数据(一个数据库中的userid列来自另一个数据库中的users
表).我不知道为什么这些是两个独立的数据库而不是架构,但是c'est la vie ...
注意:正如原始提问者暗示的那样,如果您在同一台计算机上设置两个数据库,则可能需要制作两个模式 - 在这种情况下,您不需要任何特殊的查询.
您现在可以使用新的postgres_fdw
(外部数据包装器)连接到任何Postgres数据库中的表 - 本地或远程.
请注意,其他常用数据源有外部数据包装器.在这个时候,只有postgres_fdw
和file_fdw
是正式的Postgres发布的一部分.
此功能不是默认PostgreSQL安装的一部分,但您可以将其添加.它被调用dblink
.
我从来没有使用它,但它与PostgreSQL的其余部分一起维护和分发.如果您使用的是Linux发行版附带的PostgreSQL版本,则可能需要安装名为postgresql-contrib的软件包.
在你得到关于跨数据库查询的相同结论之前,我遇到了这个问题.我最终做的是使用模式来划分表空间,这样我可以保持表分组,但仍然查询它们.
dblink在远程数据库中执行查询(通常是SELECT,但它可以是返回行的任何SQL语句).
当给出两个文本参数时,第一个参数首先被查找为持久连接的名称; 如果找到,则在该连接上执行该命令.如果未找到,则将第一个参数视为与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
只是添加更多信息.
无法查询当前数据库以外的数据库.因为PostgreSQL加载特定于数据库的系统目录,所以不确定跨数据库查询应该如何表现.
contrib/dblink允许使用函数调用进行跨数据库查询.当然,客户端也可以同时连接到不同的数据库,并在客户端合并结果.
PostgreSQL FAQ
是的,您可以使用DBlink(仅限postgresql)和DBI-Link(允许外部跨数据库查询器)和TDS_LInk,它允许对MS SQL服务器运行查询.
我之前使用过DB-Link和TDS-link取得了巨大的成功.