PostgreSQL从9.x开始支持所谓的外表的功能,就是在PostgreSQL中通过安装一些扩展再进行一些配置可以在本地建立一个外表映射到其他不同类型的数据库(可以大致理解为跨越PostgreSQL和其他类型数据库的 dblink)
今天我们介绍一下在PostgreSQL中通过tds_fdw扩展来映射Sqlserver数据库的方法
环境:ubunut14,postgresql9.3,sqlserver2005
fdw本质上是PostgreSQL的扩展,它不能直接和其他的数据库进行通信,所以必须安装能够和其他数据库服务器通信的客户端(例如mysqlClient,oracleClient,freetds等)
--安装freetds
apt-get install libsybdb5 freetds-dev freetds-common
--安装PostgreSQL
apt-get install postgresql-9.3 postgresql-client-9.3 postgresql-server-dev-9.3
--下载、上传到服务器,然后编译(可以放在任何一个目录中):
git clone https://github.com/GeoffMontee/tds_fdw.git
cd tds_fdw
make USE_PGXS=1
make USE_PGXS=1 install
--创建插件(在pgAdmin中执行)
CREATE EXTENSION tds_fdw
--创建server(在pgAdmin中执行)
CREATE SERVER server
FOREIGN DATA WRAPPER tds_fdw
OPTIONS (servername '数据库IP',character_set 'UTF-8', port '1433');
--创建映射(在pgAdmin中执行)
CREATE USER MAPPING FOR postgres
SERVER server
OPTIONS (username '数据库用户名', password '数据库密码');
--创建外表
CREATE FOREIGN TABLE EXT_test (
ID2 int NOT NULL ,
Name varchar(255) NOT NULL ,
Code varchar(255) NULL
)
SERVER server
OPTIONS (database '数据库名', query 'select ID2 ,Name,Code from Project');
--查询数据
select * from EXT_test;
--删除外表
drop FOREIGN table EXT_Project
PS:
tds_fdw项目的地址:https://github.com/GeoffMontee/tds_fdw
mysql_fdw项目地址:https://github.com/dpage/mysql_fdw