文档章节

postgresql 使用odbc_fdw连接 sqlserver

dubox
 dubox
发布于 2018/09/20 21:03
字数 895
阅读 60
收藏 1

安装配置odbc_fdw

1.安装unixODBC

apt-get install unixodbc unixodbc-dev

2.安装 Microsoft ODBC Driver 17 for SQL Server

curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
apt-get update
apt-get install msodbcsql17 mssql-tools

如果遇到: W: GPG error: http://security.ubuntu.com trusty-security Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 40976EAF437D05B5
**解决办法:**apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 40976EAF437D05B5

参考:docs.microsoft.com

3.配置ODBC

a.配置驱动

vi /etc/odbcinst.ini
#加入以下内容:
[SQLServer17] #驱动名
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.2.so.0.1
UsageCount=1

b.配置dsn,这一步并不是必须的 后面会说到

vi /etc/odbc.ini
#加入以下内容:
[erp-test] #dsn 名称
Description = erp sqlserver test
Trace = On
TraceFile = stderr
Driver = SQLServer17 #驱动名称,需和odbcinst.ini中的名称一致
Server = 192.168.1.123
PORT = 1433
encoding = UTF8

4.安装 odbc_fdw

apt-get install postgresql-server-dev-10
wget https://github.com/CartoDB/odbc_fdw/archive/0.3.0.tar.gz
make
make install

登录 pg 执行:
CREATE EXTENSION odbc_fdw; #添加扩展
再执行
\dx
如果看到:

表示添加成功
参考:https://github.com/CartoDB/odbc_fdw


odbc_fdw的使用


#--扩展的添加是基于数据库(database)的,即 切换数据库就需要重新添加
CREATE EXTENSION odbc_fdw;


#-- 使用 odbc.ini 中配置的 dsn 创建server, 谁创建归属谁
CREATE SERVER erp_sqlserver
  FOREIGN DATA WRAPPER odbc_fdw
  OPTIONS (
	dsn 'erp-test' #--需要和odbc.ini中 dsn 名称一致
  );
	
#--也可以不使用 dsn ,创建 server
CREATE SERVER erp_sqlserver2
  FOREIGN DATA WRAPPER odbc_fdw
  OPTIONS (
    odbc_DRIVER 'SQLServer17',
	odbc_SERVER '192.168.1.123',
	odbc_port '1433'
  );
	
	
#--给其他用户授予 server 使用权限
GRANT USAGE ON FOREIGN SERVER erp_sqlserver to erp_manager; 

#--创建用户和 server 之间的映射关系
CREATE USER MAPPING FOR erp_manager
  SERVER erp_sqlserver
  OPTIONS ( "odbc_UID" 'admin', "odbc_PWD" '123456');

#--导入外部数据库的 schema,可以将外部库指定schema中的全部或部分表一次导入到 pg 中指定的schema
IMPORT FOREIGN SCHEMA dbo
	LIMIT TO (table1 ,table2)  #指定需要导入的表,可选, 默认导入所有
	FROM SERVER erp_sqlserver INTO "erp_test"
	OPTIONS (
    odbc_DATABASE 'database-83336442_Test');


#--创建外部表,可以指定字段,以及通过 sql 过滤数据,类似于视图
CREATE FOREIGN TABLE
  "public".test_gbk_20180916 (
    id integer,
    name varchar(255) 
  )
  SERVER erp_sqlserver
  OPTIONS (
    odbc_DATABASE 'ddrobot',
    sql_query 'select id,name from `zt`.`test_gbk_20180916`',
    sql_count 'select count(id) from `zt`.`test_gbk_20180916`'
		#--encoding 'UTF8'
  );		
		
		

OPTIONS 中的参数是 fdw扩展自己定义的,所以不同的扩展参数也是不同的,odbc_fdw 的参数解释可以参见: https://github.com/CartoDB/odbc_fdw


遇到的问题

ERROR: length for type varchar must be at least 1 LINE 1: ...imestamp, "CallBackCount" integer, "BusinessInfo" varchar(0)
出现这个是因为我的外部 sqlserver 库中有一些varchar字段的长度设为0(sqlserver我不太熟,难道是sqlserver在这块不严格?),这个错误信息提示也比较明白,就不多说了

--

SSL SYSCALL error: EOF detected
出现这个问题的原因没有搞清楚,这应该是一个笼统的错误信息,在网上看到出现这个错误的可能性比较多,最后我的解决办法是 更换 sqlserver odbc driver 到版本17 ,之前“apt-get install msodbcsql”这样安装的版本是13

--

ERROR: Connecting to driver
出现最多的就是这个问题了,驱动没有装好、驱动配置有问题、外部数据库本身的连接问题等都会报这个错,排查起来很苦恼。。。

开启 pg 日志

修改 pg 配置文件:
vi /etc/postgresql/10/main/postgresql.conf

#开启日志重定向到日志文件
logging_collector = on

#日志目录,可以使用绝对路径或相对路径,使用相对路径时则是相对于变量‘PGDATA’代表的路径,在配置文件中搜索可以找到该路径  
log_directory = 'pg_log'  

#指定日志级别
log_min_messages = warning  

© 著作权归作者所有

共有 人打赏支持
dubox
粉丝 3
博文 98
码字总数 28307
作品 0
西安
程序员
私信 提问
Postgresql ODBC驱动,用sqlserver添加dblink跨库访问postgresql数据库

在同样是SQLserver数据库跨库访问时,只需要以下方法 declare @rowcount intset @rowcount = 0set @rowcount =(select COUNT(*) from sys.servers where name = 'ITSV2')if @rowcount <= 0b......

i_mengli
前天
0
0
关于CData ODBC Driver for MongoDB 的配置问题

最近想在SQLserver上连接MongoDB,下载了CData ODBC Driver for MongoDB。 上图是驱动的配置文件信息。 SQLSERVER链接服务器信息: 然后用的也是配置文件里的用户密码登陆的,但是显示用户‘n...

la_lala
2017/02/21
782
0
JDBC驱动下载及各种数据库的连接字符串URL写法

各种数据库的JDBC驱动下载及连接字符串URL写法 sun官方网站上的JDBC驱动列表:http://java.sun.com/products/jdbc/reference/industrysupport/index.html 数 据 库 说 明 MySQL http://www.m...

余路
2012/05/03
0
0
修改了数据库连接 可是db类型依然是

# 使用的数据库类型,根据db.type的值,下面对应类型的数据库连接要配置正确 db.type = mysql #db.type = postgresql #db.type = oracle #db.type = sqlserver #db.type = db2 # 使用postgre...

施立
2016/09/20
800
3
DBeaver 3.6.7 发布,数据库管理工具

DBeaver 3.6.7 发布了,以下是值得关注的内容: PostgreSQL: function-based indexes support PostgreSQL: columns search added PostgreSQL: triggers source viewer fixed PostgreSQL: for......

oschina
2016/05/10
1K
5

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 舔狗是没有好下场的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @我没有抓狂 :#今天听什么# #今天听这个# 分享 Nirvana 的歌曲《Smells Like Teen Spi...》 《Smells Like Teen Spi...》- Nirvana 手机党少...

小小编辑
今天
24
4
Linux Wireshark普通用户启动使用方案

当系统安装好Wireshark后请正常启动是否可以进行正常使用,如果不行请参考下列指导 向系统添加一个用户组 sudo groupadd wireshark //如提示此组存在可跳过 将指定用户添加到这个组中 sudo...

CHONGCHEN
今天
2
0
CSS 选择器参考手册

CSS 选择器参考手册 选择器 描述 [attribute] 用于选取带有指定属性的元素。 [attribute=value] 用于选取带有指定属性和值的元素。 [attribute~=value] 用于选取属性值中包含指定词汇的元素。...

Jack088
今天
2
0
数据库篇一

数据库篇 第1章 数据库介绍 1.1 数据库概述  什么是数据库(DB:DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据...

stars永恒
今天
5
0
Intellij IDEA中设置了jsp页面,但是在访问页面时却提示404

在Intellij IDEA中设置了spring boot的jsp页面,但是在访问时,却出现404,Not Found,经过查找资料后解决,步骤如下: 在Run/Debug Configurations面板中设置该程序的Working Directory选项...

uknow8692
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部