posrgresql默认的dblink只能联通posrgresql的不同数据库,不能进行异构数据库的联通,本文将介绍使用MysqL_fdw联通posrgresql和MysqL。MysqL_fdw官网为:http://pgxn.org/dist/mysql_fdw/1.0.0/
前期准备:
安装posrgresql9.1或以上版本
安装MysqL
下载MysqL_fdw
安装MysqL_fdw:
设置环境变量:
vi ~/.bash_profileexport PATH=/usr/local/bin:/usr/local/MysqL/bin:$PATHexport LD_LIBRARY_PATH=/usr/local/MysqL/libsource ~/.bash_profile
编译安装:
解压下载的MysqL_fdw,并进入解压的目录
make USE_PGXS=1 make USE_PGXS=1 install
注意:安装的使用使用root用户安装
dblink测试使用:
MysqL> create user vince; Query OK,0 rows affected (0.00 sec) MysqL> create database vince_db ; Query OK,1 row affected (0.00 sec) MysqL> grant all privileges on vince_db.* to 'vince'@'localhost' with grant option; Query OK,0 rows affected (0.00 sec) MysqL> grant all privileges on vince_db.* to 'vince'@'%' with grant option; Query OK,0 rows affected (0.00 sec) MysqL> use vince_db; Database changed MysqL> show tables; Empty set (0.00 sec) MysqL> create table test(a integer,b text); Query OK,0 rows affected (0.00 sec) MysqL> insert into test(a,b)values (1,'a'); Query OK,1 row affected (0.00 sec) MysqL> insert into test(a,b)values (2,'b'); Query OK,1 row affected (0.00 sec)
-- Create the require functions for the FDW. CREATE FUNCTION MysqL_fdw_handler() RETURNS fdw_handler AS '$libdir/MysqL_fdw' LANGUAGE C STRICT; CREATE FUNCTION MysqL_fdw_validator(text[],oid) RETURNS void AS '$libdir/MysqL_fdw' LANGUAGE C STRICT; -- Create the data wrapper or "transport". CREATE FOREIGN DATA WRAPPER MysqL_fdw HANDLER MysqL_fdw_handler VALIDATOR MysqL_fdw_validator; -- Create the foreign server,a pointer to the MysqL server. CREATE SERVER MysqL_svr FOREIGN DATA WRAPPER MysqL_fdw OPTIONS (address '127.0.0.1',port '3306');CREATE USER MAPPING FOR PUBLIC SERVER MysqL_svr OPTIONS(username 'vince',password '');create foreign table test ( a integer,b text) server MysqL_svr options(table 'vince_db.test');
测试:查询:
pgdb1=# select * from test; a | b ---+--- 1 | a 2 | b (2 rows)
关联:
pgdb1=# create table MysqL_test(a integer,b text); CREATE TABLE pgdb1=# insert into MysqL_test(a,b) values(1,'a'); INSERT 0 1 pgdb1=# select * from test t1,MysqL_test t2 where t1.a=t2.a; a | b | a | b ---+---+---+--- 1 | a | 1 | a (1 row)
插入:
pgdb1=# insert into test(a,b) values (3,'c'); ERROR: cannot change foreign table "test"
更新:
pgdb1=# update test set b='c' where a=1; ERROR: cannot change foreign table "test"
结论:
MysqL_fdw可以很好的使postgresql联通MysqL,进行查询,关联等操作,但是外表是不能进行添加和更新操作。