dblink PostgreSQL 扩展 允许您连接到其他 PostgreSQL 数据库并运行任意查询。

您可以使用外部数据包装器 (FDW) 来定义远程 外部服务器 以访问其数据。数据库连接详细信息(如主机名)保存在一个位置,您只需要创建一个 用户映射 来存储远程连接凭据。

在开始之前,请登录您的 Managed Service for TimescaleDB 门户,导航到 概览 选项卡,并记下 PostgreSQL 远程服务器的这些参数。或者,您可以使用 Aiven 客户端中的 avn service get 命令

  • HOSTNAME:远程数据库主机名
  • PORT:远程数据库端口
  • USER:要连接的远程数据库用户。默认用户是 tsdbadmin
  • PASSWORDUSER 的远程数据库密码
  • DATABASE_NAME:远程数据库名称。默认数据库名称是 defaultdb

要在 MST PostgreSQL 服务上启用 dblink 扩展

  1. tsdbadmin 用户身份连接到数据库

    psql -x "postgres://tsdbadmin:<PASSWORD>@<HOSTNAME>:<PORT>/defaultdb?sslmode=require"
  2. 创建 dblink 扩展

    CREATE EXTENSION dblink;
  3. 创建一个名为 inventory 的表

    CREATE TABLE inventory (id int);
  4. 将数据插入到 inventory 表中

    INSERT INTO inventory (id) VALUES (100), (200), (300);
  1. 创建一个可以访问 dblink 的用户 user1

    CREATE USER user1 PASSWORD 'secret1'
  2. 创建一个名为 mst_remote 的远程服务器定义,使用 dblink_fdw 和 MST 服务的连接详细信息。

    CREATE SERVER mst_remote
    FOREIGN DATA WRAPPER dblink_fdw
    OPTIONS (
    host 'HOST',
    dbname 'DATABASE_NAME',
    port 'PORT'
    );
  3. user1 创建一个用户映射,以便在使用 dblink 时自动以 tsdbadmin 身份进行身份验证

    CREATE USER MAPPING FOR user1
    SERVER mst_remote
    OPTIONS (
    user 'tsdbadmin',
    password 'PASSWORD'
    );
  4. 允许 user1 使用远程 PostgreSQL 连接 mst_remote

    GRANT USAGE ON FOREIGN SERVER mst_remote TO user1;

在此示例中,user1 用户从 mst_remote 服务器定义查询目标 PostgreSQL 数据库中定义的远程表 inventory

要查询外部数据包装器,您必须是具有远程服务器上必要权限的数据库用户。

  1. user1 身份连接到 MST 服务,并具有远程服务器的必要授权。

  2. 建立到远程目标服务器的 dblink 连接

    SELECT dblink_connect('my_new_conn', 'mst_remote');
  3. 使用外部服务器定义作为参数进行查询

    SELECT * FROM dblink('my_new_conn','SELECT * FROM inventory') AS t(a int);

输出类似于

a
-----
100
200
300
(3 rows)

在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页