乐闻世界logo
搜索文章和话题

How do you perform cross-database queries in PostgreSQL?

2 个月前提问
2 个月前修改
浏览次数20

1个答案

1

在PostgreSQL中执行跨数据库查询并不像在一些其他数据库管理系统中那么直接,因为PostgreSQL的设计是数据库之间相对隔离的。但是,我们有几种方法可以实现或者模拟跨数据库查询的功能。

方法1:使用dblink扩展

PostgreSQL提供了一个叫做dblink的扩展,它可以用来连接到同一个PostgreSQL实例中的其他数据库,或者甚至是另一个PostgreSQL服务器上的数据库,并执行查询。

  1. 启用dblink扩展

    首先,你需要在你的数据库中启用dblink扩展。可以通过以下SQL命令来完成:

    sql
    CREATE EXTENSION dblink;
  2. 使用dblink进行查询

    使用dblink扩展来查询其他数据库的数据。例如,如果你想从另一个数据库中查询数据,可以使用:

    sql
    SELECT * FROM dblink('dbname=其他数据库名', 'SELECT * FROM 目标表名') AS 表别名(1 数据类型,2 数据类型, ...);

    这里,你需要指定远程数据库的连接信息和要执行的SQL查询,同时定义一个结果集的格式。

方法2:使用postgres_fdw

postgres_fdw是一个外部数据包装器(Foreign Data Wrapper),用于将远程的PostgreSQL数据库或表链接到当前数据库作为外部表,这样你就可以像查询本地表一样查询这些表。

  1. 启用postgres_fdw扩展

    类似于dblink,首先启用postgres_fdw扩展:

    sql
    CREATE EXTENSION postgres_fdw;
  2. 创建服务器连接

    创建一个连接到另一个数据库的服务器定义:

    sql
    CREATE SERVER remote_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (dbname '其他数据库名', host '数据库服务器地址', port '数据库端口');
  3. 映射用户

    将本地用户映射到远程数据库的用户:

    sql
    CREATE USER MAPPING FOR 本地用户名 SERVER remote_server OPTIONS (user '远程数据库用户名', password '密码');
  4. 创建外部表

    在本地数据库中创建一个外部表,该表映射到远程数据库的表:

    sql
    CREATE FOREIGN TABLE 外部表名 (1 数据类型,2 数据类型, ...) SERVER remote_server OPTIONS (schema_name '远程表的schema', table_name '远程表名');
  5. 查询外部表

    现在你可以像查询本地表一样查询这个外部表:

    sql
    SELECT * FROM 外部表名;

每种方法都有其适用场景。dblink适合于执行简单的跨数据库查询,而postgres_fdw更适合于需要频繁访问远程数据库表的场景,因为它可以让远程表表现得就像本地表一样。

2024年7月24日 17:30 回复

你的答案