可以使用 PostgreSQL 执行跨数据库查询吗?

新手上路,请多包涵

根据以下错误消息(以及 此 Google 结果),我猜测答案是否定的,但无论如何使用 PostgreSQL 执行跨数据库查询?

 databaseA=# select * from databaseB.public.someTableName;
ERROR:  cross-database references are not implemented:
 "databaseB.public.someTableName"

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

原文由 matt b 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

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

postgres_fdw

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

请注意, 其他流行数据源也有外来数据包装器。目前,只有 postgres_fdwfile_fdw 是 Postgres 官方发行版的一部分。

对于 9.3 之前的 Postgres 版本

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

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

原文由 Neall 发布,翻译遵循 CC BY-SA 4.0 许可协议

请参阅 https://www.cybertec-postgresql.com/en/joining-data-from-multiple-postgres-databases/ [2017 年发布]

这些天您还可以选择使用 https://prestodb.io/

您可以在该 PrestoDB 节点上运行 SQL,它将根据需要分发 SQL 查询。它可以为不同的数据库连接到同一个节点两次,或者它可能连接到不同主机上的不同节点。

它不支持:

 DELETE
ALTER TABLE
CREATE TABLE (CREATE TABLE AS is supported)
GRANT
REVOKE
SHOW GRANTS
SHOW ROLES
SHOW ROLE GRANTS

所以你应该只将它用于 SELECT 和 JOIN 需求。直接连接到每个数据库以满足上述需求。 (看起来你也可以插入或更新,这很好)

客户端应用程序主要使用 JDBC 连接到 PrestoDB,但也可以使用其他类型的连接,包括与 Tableu 兼容的 Web API

这是一个由 Linux 基金会和 Presto 基金会管理的开源工具。

Presto 基金会的创始成员是:Facebook、Uber、Twitter 和阿里巴巴。

目前的成员有:Facebook、Uber、Twitter、阿里巴巴、Alluxio、Ahana、Upsolver 和英特尔。

原文由 Kind Contributor 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进