apt-get install unixodbc unixodbc-devlinux
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-toolsgit
若是遇到: 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 40976EAF437D05B5github
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=1ubuntu
b.配置dsn,这一步并非必须的 后面会说到curl
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 = UTF8sqlserver
apt-get install postgresql-server-dev-10
wget https://github.com/CartoDB/odbc_fdw/archive/0.3.0.tar.gz
make
make installpost
登陆 pg 执行:
CREATE EXTENSION odbc_fdw; #添加扩展
再执行
\dx
若是看到:
表示添加成功
参考:https://github.com/CartoDB/odbc_fdwurl
#--扩展的添加是基于数据库(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 配置文件:
vi /etc/postgresql/10/main/postgresql.conf
#开启日志重定向到日志文件 logging_collector = on #日志目录,可使用绝对路径或相对路径,使用相对路径时则是相对于变量‘PGDATA’表明的路径,在配置文件中搜索能够找到该路径 log_directory = 'pg_log' #指定日志级别 log_min_messages = warning