dblink 연결

posrgresql 기본 dblink 는 posrgresql 의 서로 다른 데이터 베 이 스 를 연결 할 수 있 을 뿐 이 구조 데이터 베 이 스 를 연결 할 수 없습니다. 본 고 는 my sql 을 사용 하 는 것 을 소개 합 니 다.fdw 는 posrgresql 과 my sql 을 연결 합 니 다.mysql_fdw 홈 페이지:http://pgxn.org/dist/mysql_fdw/1.0.0/
초기 준비:
posrgresql 9.1 이상 버 전 설치
mysql 설치
mysql 다운로드fdw
(post gresql 과 my sql 설치 과정 은 다른 글 참조)
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

컴 파일 설치:
다운 로드 된 my sqlfdw, 압축 해제 디 렉 터 리 에 들 어가 기
make USE_PGXS=1
make USE_PGXS=1 install

메모: 설치 사용 루트 사용자 설치
dblink 테스트 사용:
my sql 에서 사용자 와 데이터 베 이 스 를 만 듭 니 다:
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)

post gresql 단 에 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 는 post gresql 을 my sql 에 연결 시 켜 조회, 관련 등 작업 을 잘 할 수 있 으 나 겉 으로 는 추가 와 업데이트 작업 을 할 수 없습니다.

좋은 웹페이지 즐겨찾기