创建新的 database link。

语法

CREATE [ PUBLIC ] DATABASE LINK name
  CONNECT TO { CURRENT_USER |
               username IDENTIFIED BY 'password'}
  USING { postgres_fdw 'fdw_connection_string' |
        [ oci ] 'oracle_connection_string' }

说明

CREATE DATABASE LINK 创建新的 database link。database link 是一个对象,可用于在 DELETE、INSERT、SELECT 或 UPDATE 命令中引用远程数据库中的表或视图。引用 database link 的方式是,在 SQL 命令中引用的表或视图名称后面附加 @dblink,其中 dblink 是 database link 的名称。

database link 可以是公共链接或私有链接。公共 database link 是可以由任意用户使用的链接。私有 database link 只能由 database link 的所有者使用。指定 PUBLIC 选项将创建公共 database link。如果省略,则将创建私有 database link。

提供了 CREATE DATABASE LINK 命令时,database link 名称和指定的连接属性存储在名为 pg_catalog.edb_dblink 的 PolarDB-O 系统表中。使用指定的 database link 时,包含定义此 database link 的 edb_dblink 条目的数据库被称为本地数据库。在 edb_dblink 条目中定义其连接属性的服务器和数据库称为远程数据库。

SQL 命令如果包含对 database link 的引用,则必须在连接到本地数据库时发布。执行 SQL 命令时,对远程数据库进行相应的认证和连接,以访问 @dblink 引用所附加到的表或视图。

说明
  • database link 不能用于访问备用数据库服务器中的远程数据库。备用数据库服务器用于高可用性、负载均衡和复制等用途。
  • 有关高可用性、负载均衡以及 Postgres 数据库服务器复制的信息,请参见 PostgreSQL 核心文档

参数

参数 配置
PUBLIC 创建可由任何用户使用的公共 database link。如果省略,则 database link 将为私有链接,只能由 database link 所有者使用。
name database link 的名称。
username 用于连接到远程数据库的用户名。
CURRENT_USER 包括 CURRENT_USER 以指定 PolarDB-O 在建立与远程服务器的连接时,使用的用户映射应该与使用该链接的角色相关联。
password username 的密码。
postgres_fdw 将外部数据包装程序 postgres_fdw 指定为与远程 PolarDB-O 数据库的连接。如果数据库上未安装 postgres_fdw,请使用 CREATE EXTENSION 命令安装 postgres_fdw。有关更多信息,请参见 PostgreSQL 核心文档中的 CREATE EXTENSION 命令。
fdw_connection_string 指定 postgres_fdw 外部数据包装程序的连接信息。
oci 指定与远程 Oracle 数据库的连接。这是 PolarDB-O 的默认行为。
oracle_connection_string 指定 oci 连接的连接信息。

注释

要创建非公共 database link,您必须具有 CREATE DATABASE LINK 特权。要创建公共 database link,您必须具有 CREATE PUBLIC DATABASE LINK 特权。

  • 为 oci-dblink 设置 Oracle Instant Client

    要使用 oci-dblink,对于要在其中创建 database link 的 PolarDB-O 数据库,在运行该数据库的主机上必须下载并安装 Oracle Instant Client。

    可以从以下站点下载 Instant Client:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

  • Oracle Instant Client for Linux
    说明 以下说明适用于运行 PolarDB-O 的 Linux 主机。

    请确保运行 PolarDB-O 的 Linux 主机上已经安装了 libaio 库(Linux 原生异步 I/O 工具)。

    libaio 库可以通过以下命令安装:

    yum install libaio

    如果您已下载的 Oracle Instant Client 不包括名为 libclntsh.so 的具体文件(不含版本号后缀),则必须创建名为 libclntsh.so 的符号链接,该符号链接指向库文件的已下载版本。导航到 Instant Client 目录并执行以下命令:

    ln -s libclntsh.so.version libclntsh.so

    其中 version 是 libclntsh.so 库的版本号。例如:

    ln -s libclntsh.so.12.1 libclntsh.so

    当您执行的 SQL 命令引用了指向远程 Oracle 数据库的 database link 时,PolarDB-O 必须知道 Oracle InstantClient 库在 PolarDB-O 主机上的位置。

    LD_LIBRARY_PATH 环境变量必须包括指向 Oracle Client 安装目录的路径,该目录中包含 libclntsh.so 文件。例如,假设包含 libclntsh.so 的安装目录为 /tmp/instantclient

    export LD_LIBRARY_PATH=/tmp/instantclient:$LD_LIBRARY_PATH
    说明 在执行 pg_ctl 实用程序以启动或重启 PolarDB-O时,此 LD_LIBRARY_PATH 环境变量设置必须有效。

    如果您运行当前会话所使用的用户账户(例如,enterprisedb)将直接调用 pg_ctl 来启动或重启 PolarDB-O,请确保在调用 pg_ctl 之前设置 LD_LIBRARY_PATH。

    可以在 enterprisedb 用户账户的主目录下,设置 .bash_profile 文件中的 LD_LIBRARY_PATH(即,在文件 ~enterprisedb/.bash_profile 中设置 LD_LIBRARY_PATH)。通过这种方式,在您以 enterprisedb 身份登录时将设置 LD_LIBRARY_PATH。

    但是,如果您将 Linux 服务脚本与 systemctl 或 service 命令结合使用来启动或重启 PolarDB-O,则必须在服务脚本中设置 LD_LIBRARY_PATH,这样该变量在脚本调用 pg_ctl 实用程序时处于有效状态。

    需要进行修改以包含 LD_LIBRARY_PATH 设置的特殊脚本文件依赖于 PolarDB-O 版本、安装它的 Linux 系统以及它是随图形安装程序还是 RPM 包一起安装的。

  • Oracle Instant Clientfor Windows
    说明 以下说明适用于运行 PolarDB-O 的 Windows 主机。

    当您执行的 SQL 命令引用了指向远程 Oracle 数据库的 database link 时,PolarDB-O 必须知道 Oracle InstantClient 库在 PolarDB-O 主机上的位置。

    设置 Windows PATH 系统环境变量以包括 Oracle Client 安装目录,该目录中包含 oci.dll 文件。

    作为替代方法,您可以在 postgresql.conf 文件中设置 oracle_home 配置参数的值。oracle_home 配置参数中指定的值将覆盖 Windows PATH 环境变量。

    要在 postgresql.conf 文件中设置 oracle_home 配置参数,请编辑文件,并添加以下行:

    oracle_home = 'lib_directory '

    将 lib_directory 替换为包含 oci.dll 的 Windows 目录的名称。例如:

    oracle_home = 'C:/tmp/instantclient_10_2'

    设置 PATH 环境变量或 oracle_home 配置参数之后,必须重新启动服务器以使更改生效。从 Windows 服务控制台重新启动服务器。

    说明 如果 tnsnames.ora 配置为故障转移模式,并且出现 client:server 故障,则将与辅助服务器(通常是备份服务器)建立客户端连接。以后,当主服务器恢复正常时,客户端将保留与辅助服务器的连接,直至建立新会话。此时将自动与主服务器建立新的客户端连接。如果主服务器和辅助服务器未能同步,则对于已经与辅助服务器建立连接的客户端,在以后连接到主服务器时,可能会出现看到不同数据库视图的情况。

示例

创建 oci-dblink database link

以下示例演示使用 CREATE DATABASE LINK 命令创建 database link(名为 chicago),该链接通过 oci-dblink 连接将一个 PolarDB-O 实例连接到 Oracle 服务器。连接信息指示 PolarDB-O 以用户 admin 的身份登录 Oracle,密码为 mypassword。包括 oci 选项以向 PolarDB-O 指明这是 oci-dblink 连接;而连接字符串 '//127.0.0.1/acctg' 指定服务器地址以及数据库的名称。

CREATE DATABASE LINK chicago
  CONNECT TO admin IDENTIFIED BY 'mypassword'
  USING oci '//127.0.0.1/acctg';
说明 您可在连接字符串中指定主机名(可代替 IP 地址)。

创建 postgres_fdw database link

以下示例演示使用 CREATE DATABASE LINK 命令创建 database link(名为 bedford),该链接通过 postgres_fdw 外部数据包装程序连接,将一个 PolarDB-O 实例连接到另一个 PolarDB-O 实例。连接信息指示 PolarDB-O 以用户 admin 的身份登录,密码为 mypassword。包括 postgres_fdw 选项以向 PolarDB-O 指明这是 postgres_fdw 连接;而连接字符串 'host=127.0.0.1 port=5444 dbname=marketing' 指定服务器地址以及数据库的名称。

CREATE DATABASE LINK bedford
  CONNECT TO admin IDENTIFIED BY 'mypassword'
  USING postgres_fdw 'host=127.0.0.1 port=5444 dbname=marketing';
说明 您可在连接字符串中指定主机名(可代替 IP 地址)。

使用 database link

以下示例演示对 PolarDB-O 使用 database link 以连接到 Oracle 数据库。这些示例假设在 Oracle 数据库中已经创建 PolarDB-O 示例应用程序的 emp 表的副本,并且另一个具有示例应用程序的 PolarDB-O 数据库群集正在端口 5443 上接受连接。

创建一个名为 oralink 的公共 database link,以连接到名为 xe 的 Oracle 数据库,该数据库地址为 127.0.0.1,使用端口 1521。使用用户名 edb 和密码 password 连接到 Oracle 数据库。

CREATE PUBLIC DATABASE LINK oralink CONNECT TO edb
IDENTIFIED BY 'password' USING '//127.0.0.1:1521/xe';

在使用 database link oralink 的 Oracle 数据库中,在 emp 表上发布命令 SELECT。

SELECT * FROM emp@oralink;

 empno | ename  |    job    | mgr  |      hiredate      | sal  | comm | deptno
-------+--------+-----------+------+--------------------+------+------+--------
  7369 | SMITH  | CLERK     | 7902 | 17-DEC-80 00:00:00 |  800 |      |     20
  7499 | ALLEN  | SALESMAN  | 7698 | 20-FEB-81 00:00:00 | 1600 |  300 |     30
  7521 | WARD   | SALESMAN  | 7698 | 22-FEB-81 00:00:00 | 1250 |  500 |     30
  7566 | JONES  | MANAGER   | 7839 | 02-APR-81 00:00:00 | 2975 |      |     20
  7654 | MARTIN | SALESMAN  | 7698 | 28-SEP-81 00:00:00 | 1250 | 1400 |     30
  7698 | BLAKE  | MANAGER   | 7839 | 01-MAY-81 00:00:00 | 2850 |      |     30
  7782 | CLARK  | MANAGER   | 7839 | 09-JUN-81 00:00:00 | 2450 |      |     10
  7788 | SCOTT  | ANALYST   | 7566 | 19-APR-87 00:00:00 | 3000 |      |     20
  7839 | KING   | PRESIDENT |      | 17-NOV-81 00:00:00 | 5000 |      |     10
  7844 | TURNER | SALESMAN  | 7698 | 08-SEP-81 00:00:00 | 1500 |    0 |     30
  7876 | ADAMS  | CLERK     | 7788 | 23-MAY-87 00:00:00 | 1100 |      |     20
  7900 | JAMES  | CLERK     | 7698 | 03-DEC-81 00:00:00 |  950 |      |     30
  7902 | FORD   | ANALYST   | 7566 | 03-DEC-81 00:00:00 | 3000 |      |     20
  7934 | MILLER | CLERK     | 7782 | 23-JAN-82 00:00:00 | 1300 |      |     10
(14 rows)

创建一个名为 fdwlink 私有 database link,以连接到名为 edb 的 PolarDB-O 数据库,该数据库位于主机 192.168.2.22 上,在端口 5444 上运行。使用用户名 enterprisedb 和密码 password 连接到 PolarDB-O 数据库。

CREATE DATABASE LINK fdwlink CONNECT TO enterprisedb IDENTIFIED BY 'password' USING postgres_fdw 'host=192.168.2.22 port=5444 dbname=edb';

从本地 edb_dblink 系统表,显示 database link oralink 和 fdwlink 的属性:

SELECT lnkname, lnkuser, lnkconnstr FROM pg_catalog.edb_dblink;

 lnkname |   lnkuser    |               lnkconnstr
---------+--------------+----------------------------------------
 oralink | edb          | //127.0.0.1:1521/xe
 fdwlink | enterprisedb |
(2 rows)

对 Oracle 数据库中的 emp 表与 PolarDB-O 数据库中的 dept 表执行联接操作:

SELECT d.deptno, d.dname, e.empno, e.ename, e.job, e.sal, e.comm FROM emp@oralink e, dept@fdwlink d WHERE e.deptno = d.deptno ORDER BY 1, 3;

 deptno |   dname    | empno | ename  |    job    | sal  | comm
--------+------------+-------+--------+-----------+------+------
     10 | ACCOUNTING |  7782 | CLARK  | MANAGER   | 2450 |
     10 | ACCOUNTING |  7839 | KING   | PRESIDENT | 5000 |
     10 | ACCOUNTING |  7934 | MILLER | CLERK     | 1300 |
     20 | RESEARCH   |  7369 | SMITH  | CLERK     |  800 |
     20 | RESEARCH   |  7566 | JONES  | MANAGER   | 2975 |
     20 | RESEARCH   |  7788 | SCOTT  | ANALYST   | 3000 |
     20 | RESEARCH   |  7876 | ADAMS  | CLERK     | 1100 |
     20 | RESEARCH   |  7902 | FORD   | ANALYST   | 3000 |
     30 | SALES      |  7499 | ALLEN  | SALESMAN  | 1600 |  300
     30 | SALES      |  7521 | WARD   | SALESMAN  | 1250 |  500
     30 | SALES      |  7654 | MARTIN | SALESMAN  | 1250 | 1400
     30 | SALES      |  7698 | BLAKE  | MANAGER   | 2850 |
     30 | SALES      |  7844 | TURNER | SALESMAN  | 1500 |    0
     30 | SALES      |  7900 | JAMES  | CLERK     |  950 |
(14 rows)

oci database link 的下推

使用 oci-dblink 在远程 Oracle 数据库上执行 SQL 语句时,在特定情况下,可能会下推到外部服务器上进行处理。

下推是指处理在外部(即远程)服务器上执行,而不是在发布 SQL 语句的本地客户端上执行。下推可能会带来性能提升,因为数据在远程服务器上处理之后再返回到本地客户端。

下推适用于具有标准 SQL 联接操作(内部联接、左外部联接、右外部联接和完全外部联接)的语句。即使在生成的数据集上指定了排序,仍会发生下推。

要执行下推,必须满足特定基本条件。联接操作中涉及的表必须属于相同的外部服务器并使用相同的连接信息连接到外部服务器(即,使用 CREATE DATABASE LINK 命令定义的相同 database link)。

如需确定是否可为 SQL 语句使用下推,请使用 EXPLAIN 命令显示执行计划。

有关 EXPLAIN 命令的信息,请参见 PostgreSQL 核心文档

以下示例使用按下面所示方式创建的 database link:

CREATE PUBLIC DATABASE LINK oralink CONNECT TO edb IDENTIFIED BY 'password' USING '//192.168.2.23:1521/xe';

以下示例显示内部联接的执行计划:

EXPLAIN (verbose,costs off) SELECT d.deptno, d.dname, e.empno, e.ename FROM dept@oralink d, emp@oralink e WHERE d.deptno = e.deptno ORDER BY 1, 3;

                                        QUERY PLAN
--------------------------------------------------------------------------------
 Foreign Scan
   Output: d.deptno, d.dname, e.empno, e.ename
   Relations: (_dblink_dept_1 d) INNER JOIN (_dblink_emp_2 e)
   Remote Query: SELECT r1.deptno, r1.dname, r2.empno, r2.ename FROM (dept r1 INNER JOIN emp r2 ON ((r1.deptno = r2.deptno))) ORDER BY r1.deptno ASC NULLS LAST, r2.empno ASC NULLS LAST
(4 rows)

请注意,INNER JOIN 操作在“外部扫描”部分下执行。此联接的输出如下:

 deptno |   dname    | empno | ename
--------+------------+-------+--------
     10 | ACCOUNTING |  7782 | CLARK
     10 | ACCOUNTING |  7839 | KING
     10 | ACCOUNTING |  7934 | MILLER
     20 | RESEARCH   |  7369 | SMITH
     20 | RESEARCH   |  7566 | JONES
     20 | RESEARCH   |  7788 | SCOTT
     20 | RESEARCH   |  7876 | ADAMS
     20 | RESEARCH   |  7902 | FORD
     30 | SALES      |  7499 | ALLEN
     30 | SALES      |  7521 | WARD
     30 | SALES      |  7654 | MARTIN
     30 | SALES      |  7698 | BLAKE
     30 | SALES      |  7844 | TURNER
     30 | SALES      |  7900 | JAMES
(14 rows)

下面显示了左外部联接的执行计划:

EXPLAIN (verbose,costs off) SELECT d.deptno, d.dname, e.empno, e.ename FROM dept@oralink d LEFT OUTER JOIN emp@oralink e ON d.deptno = e.deptno ORDER BY 1, 3;

                                        QUERY PLAN
--------------------------------------------------------------------------------
 Foreign Scan
   Output: d.deptno, d.dname, e.empno, e.ename
   Relations: (_dblink_dept_1 d) LEFT JOIN (_dblink_emp_2 e)
   Remote Query: SELECT r1.deptno, r1.dname, r2.empno, r2.ename FROM (dept r1 LEFT JOIN emp r2 ON ((r1.deptno = r2.deptno))) ORDER BY r1.deptno ASC NULLS LAST, r2.empno ASC NULLS LAST
(4 rows)

此连接的输出如下:

 deptno |   dname    | empno | ename
--------+------------+-------+--------
     10 | ACCOUNTING |  7782 | CLARK
     10 | ACCOUNTING |  7839 | KING
     10 | ACCOUNTING |  7934 | MILLER
     20 | RESEARCH   |  7369 | SMITH
     20 | RESEARCH   |  7566 | JONES
     20 | RESEARCH   |  7788 | SCOTT
     20 | RESEARCH   |  7876 | ADAMS
     20 | RESEARCH   |  7902 | FORD
     30 | SALES      |  7499 | ALLEN
     30 | SALES      |  7521 | WARD
     30 | SALES      |  7654 | MARTIN
     30 | SALES      |  7698 | BLAKE
     30 | SALES      |  7844 | TURNER
     30 | SALES      |  7900 | JAMES
     40 | OPERATIONS |       |
(15 rows)

以下示例显示由于 emp 联接表位于本地而不是位于相同的外部服务器上,整个处理未下推的情况。

EXPLAIN (verbose,costs off) SELECT d.deptno, d.dname, e.empno, e.ename FROM dept@oralink d LEFT OUTER JOIN emp e ON d.deptno = e.deptno ORDER BY 1, 3;

                            QUERY PLAN
------------------------------------------------------------------
 Sort
   Output: d.deptno, d.dname, e.empno, e.ename
   Sort Key: d.deptno, e.empno
   ->  Hash Left Join
         Output: d.deptno, d.dname, e.empno, e.ename
         Hash Cond: (d.deptno = e.deptno)
         ->  Foreign Scan on _dblink_dept_1 d
               Output: d.deptno, d.dname, d.loc
               Remote Query: SELECT deptno, dname, NULL FROM dept
         ->  Hash
               Output: e.empno, e.ename, e.deptno
               ->  Seq Scan on public.emp e
                     Output: e.empno, e.ename, e.deptno
(13 rows)

此联接的输出与以前左外部联接示例的输出相同。

从 database link 创建外部表

说明 此部分中所述的存储过程与 Oracle 数据库不兼容。

创建 database link 之后,您可以创建基于此 database link 的外部表。然后,外部表可用于通过以下方式访问远程表:使用外部表名称而不是 database link 语法引用它。使用 database link 需要将 @dblink 附加到在 SQL 命令中引用的表或视图名称之后,其中 dblink 是 database link 的名称。

此技术可用于进行远程 Oracle 访问的 oci-dblink 连接,也可用于进行远程 Postgres 访问的 postgres_fdw 连接。

以下示例演示创建外部表以访问远程 Oracle 表。

首先,请按前文所述创建 database link。以下过程创建名为 oralink 的 database link 以用于连接到 Oracle 数据库。

CREATE PUBLIC DATABASE LINK oralink CONNECT TO edb IDENTIFIED BY 'password' USING '//127.0.0.1:1521/xe';

以下查询显示 database link:

SELECT lnkname, lnkuser, lnkconnstr FROM pg_catalog.edb_dblink;

 lnkname | lnkuser |     lnkconnstr
---------+---------+---------------------
 oralink | edb     | //127.0.0.1:1521/xe
(1 row)

当您创建 database link 时,PolarDB-O 将创建对应的外部服务器。以下查询显示外部服务器:

SELECT srvname, srvowner, srvfdw, srvtype, srvoptions FROM pg_foreign_server;

 srvname | srvowner | srvfdw | srvtype |          srvoptions
---------+----------+--------+---------+-------------------------------
 oralink |       10 |  14005 |         | {connstr=//127.0.0.1:1521/xe}
(1 row)

有关外部服务器的更多信息,请参见 PostgreSQL 核心文档中的 CREATE SERVER 命令。

按以下所示创建外部表:

CREATE FOREIGN TABLE emp_ora (
    empno           NUMERIC(4),
    ename           VARCHAR(10),
    job             VARCHAR(9),
    mgr             NUMERIC(4),
    hiredate        TIMESTAMP WITHOUT TIME ZONE,
    sal             NUMERIC(7,2),
    comm            NUMERIC(7,2),
    deptno          NUMERIC(2)
)
  SERVER oralink
  OPTIONS (table_name 'emp', schema_name 'edb'
);

请注意 CREATEFOREIGN TABLE 命令中的以下内容:

  • 在 CREATE FOREIGN TABLE 命令结尾的 SERVER 子句中指定的名称是外部服务器的名称,在本示例中为 oralink,如对 pg_foreign_server 的查询中的 srvname 列所示。
  • 表名称和 schema 名称在 OPTIONS 子句中由 table 和 schema 选项指定。
  • 在 CREATE FOREIGN TABLE 命令中指定的列名必须与远程表中的列名匹配。
  • 通常,可能不接受 CONSTRAINT 子句或者该子句可能不在外部表上强制实施,因为它们假定为已在远程表上定义。

有关 CREATEFOREIGN TABLE 命令的更多信息,请参见 PostgreSQL 核心文档

下面是外部表上的查询:

SELECT * FROM emp_ora;

 empno | ename  |    job    | mgr  |      hiredate      |   sal   |  comm   | deptno
-------+--------+-----------+------+--------------------+---------+---------+--------
  7369 | SMITH  | CLERK     | 7902 | 17-DEC-80 00:00:00 |  800.00 |         |     20
  7499 | ALLEN  | SALESMAN  | 7698 | 20-FEB-81 00:00:00 | 1600.00 |  300.00 |     30
  7521 | WARD   | SALESMAN  | 7698 | 22-FEB-81 00:00:00 | 1250.00 |  500.00 |     30
  7566 | JONES  | MANAGER   | 7839 | 02-APR-81 00:00:00 | 2975.00 |         |     20
  7654 | MARTIN | SALESMAN  | 7698 | 28-SEP-81 00:00:00 | 1250.00 | 1400.00 |     30
  7698 | BLAKE  | MANAGER   | 7839 | 01-MAY-81 00:00:00 | 2850.00 |         |     30
  7782 | CLARK  | MANAGER   | 7839 | 09-JUN-81 00:00:00 | 2450.00 |         |     10
  7788 | SCOTT  | ANALYST   | 7566 | 19-APR-87 00:00:00 | 3000.00 |         |     20
  7839 | KING   | PRESIDENT |      | 17-NOV-81 00:00:00 | 5000.00 |         |     10
  7844 | TURNER | SALESMAN  | 7698 | 08-SEP-81 00:00:00 | 1500.00 |    0.00 |     30
  7876 | ADAMS  | CLERK     | 7788 | 23-MAY-87 00:00:00 | 1100.00 |         |     20
  7900 | JAMES  | CLERK     | 7698 | 03-DEC-81 00:00:00 |  950.00 |         |     30
  7902 | FORD   | ANALYST   | 7566 | 03-DEC-81 00:00:00 | 3000.00 |         |     20
  7934 | MILLER | CLERK     | 7782 | 23-JAN-82 00:00:00 | 1300.00 |         |     10
(14 rows)

与之对比的是,下面是对同一个远程表的查询,但使用了 databaselink 而不是外部表:

SELECT * FROM emp@oralink;

 empno | ename  |    job    | mgr  |      hiredate      | sal  | comm | deptno
-------+--------+-----------+------+--------------------+------+------+--------
  7369 | SMITH  | CLERK     | 7902 | 17-DEC-80 00:00:00 |  800 |      |     20
  7499 | ALLEN  | SALESMAN  | 7698 | 20-FEB-81 00:00:00 | 1600 |  300 |     30
  7521 | WARD   | SALESMAN  | 7698 | 22-FEB-81 00:00:00 | 1250 |  500 |     30
  7566 | JONES  | MANAGER   | 7839 | 02-APR-81 00:00:00 | 2975 |      |     20
  7654 | MARTIN | SALESMAN  | 7698 | 28-SEP-81 00:00:00 | 1250 | 1400 |     30
  7698 | BLAKE  | MANAGER   | 7839 | 01-MAY-81 00:00:00 | 2850 |      |     30
  7782 | CLARK  | MANAGER   | 7839 | 09-JUN-81 00:00:00 | 2450 |      |     10
  7788 | SCOTT  | ANALYST   | 7566 | 19-APR-87 00:00:00 | 3000 |      |     20
  7839 | KING   | PRESIDENT |      | 17-NOV-81 00:00:00 | 5000 |      |     10
  7844 | TURNER | SALESMAN  | 7698 | 08-SEP-81 00:00:00 | 1500 |    0 |     30
  7876 | ADAMS  | CLERK     | 7788 | 23-MAY-87 00:00:00 | 1100 |      |     20
  7900 | JAMES  | CLERK     | 7698 | 03-DEC-81 00:00:00 |  950 |      |     30
  7902 | FORD   | ANALYST   | 7566 | 03-DEC-81 00:00:00 | 3000 |      |     20
  7934 | MILLER | CLERK     | 7782 | 23-JAN-82 00:00:00 | 1300 |      |     10
(14 rows)
说明 由于向后兼容的原因,仍可能写入 USING libpq 而不是 USING postgres_fdw。但是,libpq 连接器缺少 postgres_fdw 连接器中提供的许多重要优化功能。因此,请尽可能使用 postgres_fdw 连接器。libpq 选项已废弃,在未来的 PolarDB-O 发行版中可能会彻底删除。