1. 程式人生 > >PostgreSQL之Foreign Data Wrappers使用指南

PostgreSQL之Foreign Data Wrappers使用指南

PostgreSQL的fdw實現的功能是各個postgresql資料庫及遠端資料庫之間的跨庫操作,功能和oracle的dblink一樣。 本文中的環境如下圖所示:
PostgreSQL之Foreign Data Wrappers使用指南

1.1、目標端安裝軟體包

[[email protected] ~]# yum -y install postgresql10-contrib.x86_64

1.2、目標端建立使用者

這裡的源端不需要建立使用者。因為源端已經存在了一個rhnuser使用者,直接使用。根據實際情況賦予使用者許可權,一般就是select、update、delete以及insert。這裡的使用者已經擁有這些許可權了,所以不需要再賦予許可權。

postgres=# CREATE USER rhnadmin WITH password 'redhat' CREATEDB SUPERUSER replication bypa***ls createrole login;

1.3、目標端安裝Postgres_fdw

postgres=# create extension postgres_fdw;
CREATE EXTENSION
postgres=# \dx postgres_fdw

PostgreSQL之Foreign Data Wrappers使用指南

1.4、賦予使用者許可權

postgres=# grant usage on FOREIGN DATA WRAPPER postgres_fdw to rhnadmin;

1.5、建立伺服器定義

postgres=# CREATE SERVER rhnsrv FOREIGN DATA WRAPPER postgres_fdw OPTIONS (dbname 'rhnschema', host 'oln', port '5432');
postgres=# GRANT USAGE ON FOREIGN SERVER rhnsrv TO rhnadmin;

PostgreSQL之Foreign Data Wrappers使用指南

1.6、建立使用者對映

rhnschema=# CREATE USER MAPPING for rhnadmin SERVER rhnsrv OPTIONS (user 'rhnuser', password 'redhat');

PostgreSQL之Foreign Data Wrappers使用指南

1.7、修改pg_hba檔案

如下圖所示,允許特定網段的機器訪問。這裡全部放開。
PostgreSQL之Foreign Data Wrappers使用指南

1.8、匯入源端schema

rhnschema=# IMPORT FOREIGN SCHEMA "public" FROM SERVER rhnsrv INTO public;
ERROR:  type "public.evr_t" does not exist
--首次匯入報錯了,因為目標端沒有建立evr_t型別,使用下面的語句建立型別再次匯入。
rhnschema=# CREATE TYPE evr_t AS (epoch character varying(16),version character varying(512),release character varying(512));
rhnschema=# ALTER TYPE public.evr_t OWNER TO rhnadmin;
rhnschema=# IMPORT FOREIGN SCHEMA public FROM SERVER rhnsrv INTO public;
IMPORT FOREIGN SCHEMA

如果只想匯入個別表,需要使用下面的語法:

rhnschema=# IMPORT FOREIGN SCHEMA "public" limit to (rhnpackagefile) FROM SERVER rhnsrv INTO public;

1.9、查詢驗證

匯入完成後,可以查詢pg_foreign_table表,獲取已匯入的表名稱資訊:

rhnschema=# select *from pg_foreign_table;
rhnschema=# select *from log limit 20;

PostgreSQL之Foreign Data Wrappers使用指南