PolarDB PostgreSQL版(兼容Oracle)提供了网络通道管理功能,通过网络通道您可以基于fdw外部表、dblink、database link等多种方式实现跨库访问数据,使得跨库访问数据变得更为灵活和便捷。本文介绍如何通过网络通道跨库查询数据。
前提条件
已创建源集群和目标集群。具体操作,请参见创建PolarDB PostgreSQL版(兼容Oracle)集群。
PolarDB PostgreSQL版(兼容Oracle)的网络通道目前支持如下两种方式:
源实例为PolarDB PostgreSQL版(兼容Oracle)集群;目标数据库为PolarDB PostgreSQL版或PolarDB PostgreSQL版(兼容Oracle)集群。
源实例为PolarDB PostgreSQL版(兼容Oracle)集群;目标数据库为ECS自建PostgreSQL数据库。
已在源集群和目标集群中创建数据库。具体操作,请参见数据库管理。
已在目标集群数据库中创建表。
注意事项
目前仅支持在源集群上查询目标集群数据,不支持在目标集群上查询源集群数据。
操作步骤
创建网络通道。
PolarDB PostgreSQL版(兼容Oracle)提供了如下两种创建方式:
连接源集群。具体操作,请参见连接数据库集群。
通过创建的网络通道可以在源集群使用不同的跨库方式来查询目标集群数据。
您可以在控制台查看网络通道名称和网络通道对应的目标集群,如下图所示。
示例
通过fdw外部表访问
执行以下指令需要postgres_fdw插件,请使用CREATE EXTENSION
命令创建插件。
1.在源实例创建使用外部数据包装器postgres_fdw的服务器myserver,channel_name对应控制台创建的网络通道的名称chltest,dbname对应要访问目标集群的数据库名foodb:
CREATE SERVER myserver FOREIGN DATA WRAPPER postgres_fdw OPTIONS (channel_name 'chltest', dbname 'foodb');
2.在源实例为用户bob、外部数据包装器postgres_fdw的服务器myserver创建一个用户映射。options中的user对应访问目标集群的用户bob:
CREATE USER MAPPING FOR bob SERVER myserver OPTIONS (user 'bob', password 'mypassword');
3.在源实例创建外部表foreign_table,并通过服务器myserver访问该表:
CREATE FOREIGN TABLE foreign_table (
id integer NOT NULL,
data text
)SERVER myserver
OPTIONS (table_name 'test');
4.在目标数据库中创建一个用于测试的表test,并在表中插入测试数据。命令如下:
CREATE TABLE test(id integer NOT NULL, data text);
INSERT INTO test VALUES(1,'test');
5.连接源数据库,执行如下查询命令:
SELECT * FROM foreign_table
id | data
----+------
1 | test
(1 row)
具体参照:DBLink与外部表
通过DATABASE LINK访问
执行以下指令需要postgres_fdw插件,请使用CREATE EXTENSION
命令创建插件。
1.创建一个数据库连接pg_dblink,bob对应连接到远程数据库的用户名,channel_name对应控制台创建的网络通道的名称chltest,foodb对应连接到远程数据库的名称:
CREATE DATABASE LINK pg_dblink
CONNECT TO bob IDENTIFIED BY "mypassword"
USING (channel_name 'chltest', dbname 'foodb');
2.在目标数据库中创建一个用于测试的表test,并在表中插入测试数据。命令如下:
CREATE TABLE test(id integer NOT NULL, data text);
INSERT INTO test VALUES(1,'test');
3.使用数据库连接查询test表:
SELECT * FROM test@pg_dblink
id | data
----+------
1 | test
(1 row)