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)