PG fdw 跨庫建立外部表 (連接其它PG庫或其它數據庫 )


fdw是foreign-data wrapper的一個簡稱,可以叫外部封裝數據
PostgreSQL的數據庫邏輯上是相互獨立的,和Oracle類似,如果要訪問其他數據庫,需要做跨庫操作,Postgres本身提供了一些擴展,比如dblink,pgsql_fdw等,高版本的建議使用postgres_fdw,也就是pgsql_fdw的升級版

1安裝fdw

fdw工具是pg自帶的擴展工具,可以直接到postgres的解壓目錄安裝
路徑是postgresql-9.4.4/contrib/file_fdw 10版本之后不需要安裝

  make

  make install

安裝后進入數據庫用select * from pg_available_extension 查看是否安裝完成 postgres_fdw

2.創建庫連接

create extension postgres_fdw; 建立fdw擴展工具
創建遠程服務器,這里需要定義主機地址,數據庫名和端口
create server fore_server foreign data wrapper postgres_fdw options(host '1.1.1.1',port '5432',dbname 'postgres');
指定連接遠程數據庫的用戶,和創建的遠程服務器一致
create user mapping for postgres server server_remote_farr options(user 'postgres',password 'postgres');

創建外部表
CREATE FOREIGN TABLE F_A
(id int)
server fore_server options (schema_name 'postgres',table_name 'A');

連接Mysql
CREATE SERVER mysql_svr  FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host '192.168.173.43', port '3306'); CREATE USER MAPPING FOR local SERVER mysql_svr OPTIONS (username 'usr_fdw', password '123456'); CREATE FOREIGN TABLE pg_mysql_tbl_fdw (id integer,vname text) SERVER mysql_svr OPTIONS (dbname 'mysql_fdw',table_name 'tbl_fdw');


連接Oracle:
CREATE SERVER oradb FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//dbserver.mydomain.com/ORADB'); ////dbserver.mydomain.com/ORADB指的是tns的名稱 GRANT USAGE ON FOREIGN SERVER oradb TO pguser; CREATE USER MAPPING FOR pguser SERVER oradb OPTIONS (user 'orauser', password 'orapwd'); CREATE FOREIGN TABLE oratab ( id integer OPTIONS (key 'true') NOT NULL, text character varying(30), floating double precision NOT NULL ) SERVER oradb OPTIONS (schema 'ORAUSER', table 'ORATAB');
連接SqlserverCREATE SERVER mssql_svr FOREIGN DATA WRAPPER tds_fdw OPTIONS (servername '127.0.0.1', port '1433', database 'tds_fdw_test'); CREATE USER MAPPING FOR postgres SERVER mssql_svr OPTIONS (username 'sa', password 'xxxx'); CREATE FOREIGN TABLE mssql_table ( id integer, data varchar) SERVER mssql_svr OPTIONS (table_name 'dbo.mytable');


更改 server: ALTER SERVER foo OPTIONS (SET host 'baz'); 更改 user mapping: ALTER USER MAPPING FOR bob SERVER foo OPTIONS (SET password 'public'); 更改 foreign table: ALTER FOREIGN TABLE myschema.distributors OPTIONS (ADD opt1 'value', SET opt2 'value2', DROP opt3 'value3');

3.使用外部表(連接文件)

需要先安裝file_fdw,一般是進到PostgreSQL的源碼包中的contrib/file_fdw目錄下,執行:

make
make install

然后進入數據庫中,執行以下SQL把file_fdw安裝上:

CREATE EXTENSION file_fdw;
CREATE SERVER file_fdw_server FOREIGN DATA WRAPPER file_fdw;

Pg連接外部文件

1. 安裝file_fdw

需要先安裝file_fdw,一般是進到PostgreSQL的源碼包中的contrib/file_fdw目錄下,執行:

make
make install

然后進入數據庫中,執行以下SQL把file_fdw安裝上:

CREATE EXTENSION file_fdw;
CREATE SERVER file_fdw_server FOREIGN DATA WRAPPER file_fdw;

2. 建立外部表

 
就以常見emp表為例;
 
create foreign table EMP
(
  empno    integer not null,
  ename    VARCHAR(10),
  job      VARCHAR(9),
  mgr      integer,
  hiredate DATE,
  sal      NUMERIC(6,2),
  comm     NUMERIC(6,2),
  deptno   integer
)SERVER file_fdw_server
OPTIONS (format 'csv',header 'true',filename '/home/postgres/emp.log', delimiter ',', null '');
 
--后面options里面參數的說明
--filename后面是文件名和絕對路徑
--format是格式,csv是逗號分隔,text表示是tab分隔的方式
--delimiter是分隔符--header表示第一行數據是否需要;為true表示不需要;默認為false;為需要
--null表示空數據的轉化處理,例子中字段''將轉化為null


 
 


 
         



 
 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM