您的位置:首页 > 数据库

pgsql_fdw

2014-06-06 16:26 197 查看
/article/1873813.html

是一个类似dblink的一个跨库操作的中间件。

1:环境:

本地库:

ip:127.0.0.1

port:5432

dbname:postgres

外部库:
ip:127.0.0.1

port:5001

dbname:digoal

本地库postgres信息:

postgres=# select * from pg_stat_activity;

-[ RECORD 1 ]----+--------------------------------

datid | 12896

datname | postgres

pid | 39391

usesysid | 10

usename | postgres

application_name | psql

client_addr | ::1

client_hostname |

client_port | 57313

backend_start | 2014-06-09 10:11:39.697793+08

xact_start | 2014-06-09 10:55:19.629726+08

query_start | 2014-06-09 10:55:19.629726+08

state_change | 2014-06-09 10:55:19.629749+08

waiting | f

state | active

query | select * from pg_stat_activity;

外部库digoal信息:

digoal=# select * from pg_stat_activity;

-[ RECORD 1 ]----+--------------------------------

datid | 16384

datname | digoal

pid | 39570

usesysid | 10

usename | postgres

application_name | psql

client_addr | ::1

client_hostname |

client_port | 42339

backend_start | 2014-06-09 10:51:28.05419+08

xact_start | 2014-06-09 10:52:46.52235+08

query_start | 2014-06-09 10:52:46.52235+08

state_change | 2014-06-09 10:52:46.522354+08

waiting | f

state | active

query | select * from pg_stat_activity;

2:在外部数据库创建表

CREATE table test ( id int,info text);
digoal=# insert  into  test values(1,'xxxx');
INSERT 0 1


3:本地配置:

需先create extension postgres_fdw;创建此中间件。

1:CREATE SERVER

define a new foreign server

CREATE SERVER server_name [ TYPE 'server_type' ] [ VERSION 'server_version' ]
FOREIGN DATA WRAPPER fdw_name
[ OPTIONS ( option 'value' [, ... ] ) ]


fdw_name:必须是creaete extension ...安装过的,比如“pgsql”,“file_fdw”,“plproxy”......

postgres=# create extension postgres_fdw ;
CREATE EXTENSION
postgres=# CREATE SERVER myserver FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'localhost', dbname 'digoal', port '5001');
CREATE SERVER


2:CREATE USER MAPPING

define a new mapping of a user to a foreign server

CREATE USER MAPPING FOR { user_name | USER | CURRENT_USER | PUBLIC }
SERVER server_name
[ OPTIONS ( option 'value' [ , ... ] ) ]

user_name:本地数据库用户名。

server_name:是在上一步通过create server创建的名字。

options:远程数据库端的信息。

postgres=# CREATE USER MAPPING FOR postgres SERVER myserver OPTIONS (user 'postgres', password '***');
CREATE USER MAPPING
postgres=# \deu+
List of user mappings
-[ RECORD 1 ]------------------------------------
Server      | myserver
User name   | postgres
FDW Options | ("user" 'postgres', password '***')


3:CREATE FOREIGN TABLE

CREATE FOREIGN TABLE test ( id int,info text) server myserver  options (schema_name 'public', table_name 'test');


如果去掉options的选项,则会自动在外部数据库中找到相应表。

4:在本地查看外部数据表

postgres=# select * from test;
id | info
----+------
1 | xxxx
(1 row)


4:在本地库清理

1:删除foreign table:

postgres=# drop foreign table test;
DROP FOREIGN TABLE


2:删除mapping:

postgres=# \deu+
List of user mappings
Server  | User name |             FDW Options
----------+-----------+-------------------------------------
myserver | postgres  | ("user" 'postgres', password '***')
(1 row)

postgres=# DROP USER MAPPING IF EXISTS FOR postgres SERVER myserver;
DROP USER MAPPING

3:删除server:

postgres=# drop server myserver ;
DROP SERVER
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: