PolarDB PostgreSQL版(兼容Oracle)提供了DBLink功能,您可以通过DBLink功能实现跨库查询数据。本文介绍如何通过DBLink跨库查询数据。

前提条件

  • 已创建源集群和目标集群。具体操作,请参见创建PolarDB PostgreSQL版(兼容Oracle)集群
    说明 PolarDB PostgreSQL版(兼容Oracle)的DBLink目前支持如下两种连接方式:
    • 源数据库为PolarDB PostgreSQL版(兼容Oracle)集群;目标数据库为PolarDB PostgreSQL版(兼容Oracle)集群。
    • 源数据库为PolarDB PostgreSQL版(兼容Oracle)集群;目标数据库为ECS自建PostgreSQL数据库。
  • 已在源集群和目标集群中创建数据库。具体操作,请参见创建数据库
  • 已在目标数据库中创建表。

注意事项

目前仅支持在源集群上查询目标集群数据,不支持在目标集群上查询源集群数据。

参数配置

PolarDB PostgreSQL版(兼容Oracle)提供了polar_enable_pushable_unsafe_collate_remotepolar_enable_pushable_all_any_remote参数,用于提升查询性能。

  • polar_enable_pushable_unsafe_collate_remote(会话级别参数):支持unsafe collate下推,默认打开。

    如果关闭该参数,部分函数因为考虑collate规则,不会主动下推。

    • 打开命令:
      SET polar_enable_pushable_unsafe_collate_remote = on;
    • 关闭命令:
      SET polar_enable_pushable_unsafe_collate_remote = off;
  • polar_enable_pushable_all_any_remote(会话级别参数):支持ALL/ANY下推,默认打开。

    如果关闭该参数,部分ALL/ANY表达式则不会下推。

    • 打开命令:
      SET polar_enable_pushable_all_any_remote = on;
    • 关闭命令:
      SET polar_enable_pushable_all_any_remote = off;

操作步骤

  1. 创建DBLink。
  2. 连接源集群。具体操作,请参见连接数据库集群
  3. 在源集群上跨库查询数据。

    查询语句如下:

    SELECT * FROM <dbname>@<dblinkname>;
    • <dbname>:目标集群的数据库里的表。
      说明 该表必须在DBLink所连接的目标数据库中。
    • <dblinkname>:DBLink名称。

    您可以在控制台查看DBLink名称和DBLink的目标数据库,如下图所示。

    dblink

示例

在目标数据库中创建一个用于测试的表test,并在表中插入测试数据。命令如下:

CREATE TABLE test(id int);
INSERT INTO test VALUES(1);

连接源数据库,执行如下查询命令:

SELECT * FROM test@dblinkname;

查询结果如下:

 id
----
  1
(1 row)