ITPub博客

首页 > 数据库 > PostgreSQL > postgresql端使用tds_fdw创建访问sqlserver的linked server的操作说明

postgresql端使用tds_fdw创建访问sqlserver的linked server的操作说明

原创 PostgreSQL 作者:lusklusklusk 时间:2020-06-03 14:24:38 0 删除 编辑

参考文档
https://www.postgresql.org/docs/11/postgres-fdw.html     --postgres-fdw只能用于pg与pg直接的linked server
https://www.postgresql.org/message-id/CAA7biFNNDzmmL3O4fOm4h=Tf08BaFWS_sQXS98qHPHqNYKJyBw@mail.gmail.com
https://github.com/tds-fdw/tds_fdw
https://github.com/tds-fdw/tds_fdw/blob/master/InstallCentOS.md

这种方式有很多bug,不建议使用,因为sqlserver 2016居然没有对应的tds版本号,参见http://www.freetds.org/userguide/choosingtdsprotocol.htm



1、PostgreSQL端安装依赖包
[root@ecmpgdbdev ~]# sudo yum install epel-release
[root@ecmpgdbdev ~]# sudo yum install freetds-devel
[root@ecmpgdbdev ~]# sudo yum install gcc make wget

2、PostgreSQL端安装tds_fdw
[root@ecmpgdbdev ~]# curl https://tds-fdw.github.io/yum/tds_fdw.repo -o /etc/yum.repos.d/tds_fdw.repo
[root@ecmpgdbdev ~]# yum install postgresql-11-tds_fdw


3、PostgreSQL端创建拓展包
-bash-4.2$ psql
postgres=# CREATE EXTENSION tds_fdw;


4、PostgreSQL端创建foreign server
CREATE SERVER mssql_svr FOREIGN DATA WRAPPER tds_fdw OPTIONS (servername '172.22.136.190', port '49787', database 'ECMDB', tds_version '7.4');
--sqlserver数据库版本是2012-2014,则tds_version选项7.4,sqlserver 2016居然没有对应版本
--servername指的是hostname或ip,不能是sqlserver的实例名称

5、PostgreSQL端创建用户映射,MAPPING是固定的不是postgresql的用户名,不能把MAPPING换成其他的如sqlserveruser
CREATE USER MAPPING FOR postgres SERVER mssql_svr OPTIONS (username 'domain\sqluser', password 'X');

6、把sqlserver的dbo.Activity表映射到postgresql的public下
IMPORT FOREIGN SCHEMA dbo limit to (Activity) FROM SERVER mssql_svr INTO public OPTIONS (import_default 'true');
--查不到public.Activity,很奇怪

CREATE FOREIGN TABLE test1."Activity" (
    "ActivityID" INTEGER NOT NULL,
    "ActivityTypeID" INTEGER NOT NULL,
)  SERVER mssql_svr OPTIONS (table_name 'dbo.Activity');
--可以查到test1."Activity",但是有如下报错
WARNING:  Table definition mismatch: Foreign source has column named , but target table does not. Column will be ignored.
WARNING:  Table definition mismatch: Could not match local column ActivityID with column from foreign table
WARNING:  Table definition mismatch: Could not match local column Description with column from foreign table




FDW的一些参考语句
select * from pg_extension;
select * from pg_foreign_data_wrapper;
select * from pg_foreign_server;
select * from pg_foreign_table;
select * from pg_user_mappings;



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30126024/viewspace-2695939/,如需转载,请注明出处,否则将追究法律责任。

全部评论
Welcome to Lukes DB HOME。 Oracle OCM、Mysql OCP, 8年以上DBA工作经验,博客仅记录自己的一个学习过程,不代表完全准确,如有需要,欢迎转载。

注册时间:2015-02-02

  • 博文量
    405
  • 访问量
    663803