postgresql與mysql使用dblink聯通

posrgresql默認的dblink只能聯通posrgresql的不同數據庫,不能進行異構數據庫的聯通,本文將介紹使用mysql_fdw聯通posrgresql和mysql。mysql_fdw官網爲:http://pgxn.org/dist/mysql_fdw/1.0.0/

前期準備

安裝posrgresql9.1或以上版本

安裝mysql

下載mysql_fdw

(postgresql和mysql安裝過程參見其他文章)


安裝mysql_fdw:

設置環境變量:

vi ~/.bash_profile 

export PATH=/usr/local/bin:/usr/local/mysql/bin:$PATH

export LD_LIBRARY_PATH=/usr/local/mysql/lib
source ~/.bash_profile


編譯安裝:

解壓下載的mysql_fdw,並進入解壓的目錄

make USE_PGXS=1
make USE_PGXS=1 install

注意:安裝的使用使用root用戶安裝


dblink測試使用:

在mysql端創建用戶和數據庫:

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)

在postgresql端創建dblink鏈接:

-- 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,進行查詢,關聯等操作,但是外表是不能進行添加和更新操作。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章