PG fdw 跨库建立外部表 (连接其它PG库或其它数据库 )
fdw是foreign-data wrapper的一個(gè)簡稱,可以叫外部封裝數(shù)據(jù)
PostgreSQL的數(shù)據(jù)庫邏輯上是相互獨(dú)立的,和Oracle類似,如果要訪問其他數(shù)據(jù)庫,需要做跨庫操作,Postgres本身提供了一些擴(kuò)展,比如dblink,pgsql_fdw等,高版本的建議使用postgres_fdw,也就是pgsql_fdw的升級(jí)版
1安裝fdw
fdw工具是pg自帶的擴(kuò)展工具,可以直接到postgres的解壓目錄安裝
路徑是postgresql-9.4.4/contrib/file_fdw 10版本之后不需要安裝
make
make install
安裝后進(jìn)入數(shù)據(jù)庫用select * from pg_available_extension 查看是否安裝完成postgres_fdw
2.創(chuàng)建庫連接
create extension postgres_fdw; 建立fdw擴(kuò)展工具
創(chuàng)建遠(yuǎn)程服務(wù)器,這里需要定義主機(jī)地址,數(shù)據(jù)庫名和端口
create server fore_server foreign data wrapper postgres_fdw options(host '1.1.1.1',port '5432',dbname 'postgres');
指定連接遠(yuǎn)程數(shù)據(jù)庫的用戶,和創(chuàng)建的遠(yuǎn)程服務(wù)器一致create user mapping forpostgresserver server_remote_farr options(user 'postgres',password 'postgres');
創(chuàng)建外部表
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');
連接Sqlserver:
CREATE 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,一般是進(jìn)到PostgreSQL的源碼包中的contrib/file_fdw目錄下,執(zhí)行:
make
make install
然后進(jìn)入數(shù)據(jù)庫中,執(zhí)行以下SQL把file_fdw安裝上:
CREATE EXTENSION file_fdw;
CREATE SERVER file_fdw_server FOREIGN DATA WRAPPER file_fdw;
Pg連接外部文件
1. 安裝file_fdw
需要先安裝file_fdw,一般是進(jìn)到PostgreSQL的源碼包中的contrib/file_fdw目錄下,執(zhí)行:
make
make install
然后進(jìn)入數(shù)據(jù)庫中,執(zhí)行以下SQL把file_fdw安裝上:
CREATE EXTENSION file_fdw;
CREATE SERVER file_fdw_server FOREIGN DATA WRAPPER file_fdw;
2. 建立外部表
就以常見emp表為例;
createforeigntableEMP
(
empnointegernotnull,
enameVARCHAR(10),
jobVARCHAR(9),
mgrinteger,
hiredateDATE,
salNUMERIC(6,2),
commNUMERIC(6,2),
deptnointeger
)SERVERfile_fdw_server
OPTIONS(format'csv',header'true',filename'/home/postgres/emp.log',delimiter',',null'');
--后面options里面參數(shù)的說明
--filename后面是文件名和絕對(duì)路徑
--format是格式,csv是逗號(hào)分隔,text表示是tab分隔的方式
--delimiter是分隔符--header表示第一行數(shù)據(jù)是否需要;為true表示不需要;默認(rèn)為false;為需要
--null表示空數(shù)據(jù)的轉(zhuǎn)化處理,例子中字段''將轉(zhuǎn)化為null
總結(jié)
以上是生活随笔為你收集整理的PG fdw 跨库建立外部表 (连接其它PG库或其它数据库 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Automatically popula
- 下一篇: 实时操作系统是什么(操作系统的五大功能是