环境:suse 11 ,64位的操作系统
unixODBC 版本:2.3.2
PostgreSQL 9.3.4
1 编译安装 unixODBC
下载 unixODBC :http://www.unixodbc.org/download.html
解压编译
tar -zxvf unixODBC-2.3.2.tar.gz cd unixODBC-2.3.2 ./configure --prefix=/opt/unixODBC make && make install
安装路径设置在 /opt/unixODBC
2 下载postgresql 的odbc rpm 包
下载地址:http://rpm.pbone.net/index.php3/stat/4/idpl/23893919/dir/opensuse_11.x/com/unixODBC-2.2.12-200.123.1.x86_64.rpm.html
当然,还有很多其他系统版本的postgresql 的odbc 驱动,http://rpm.pbone.net/index.php3/stat/3/srodzaj/1/search/libodbcpsqlS.so.1%28%29%2864bit%29
3 安装下载rpm 包
rpm -ivh unixODBC-2.2.12-200.123.1.x86_64.rpm
如果安装时候说有依赖的rpm 没有安装,可以忽略缺省的rpm ,强行安装此rpm
rpm -ivh --nodeps unixODBC-2.2.12-200.123.1.x86_64.rpm
安装后,驱动应该在 /usr/lib64/unixODBC
你可以自己手工find 一下,检查odbc 的驱动存放在哪里
find /usr/ -iname "*odbc*.so*" | grep psql
我这样的显示的是
/usr/lib64/unixODBC/libodbcpsqlS.so
/usr/lib64/unixODBC/libodbcpsql.so
PostgreSQL 情况
PostgreSQL 版本为9.3.4 ,数据库为 foo ,使用用户为 sdbadmin,服务端口为5432
PostgreSQL里存在两张表,一张是PostgreSQL 自身的表test ;
一张是PostgreSQL 的外部表 chen,对接的是SequoiaDB 的数据源(如何实现PostgreSQL对接SequoiaDB,可以参考:http://www.sequoiadb.com/index.php?p=whitepaper_7)
4 配置unixODBC ,适配PostgreSQL 服务
修改odbcinst.ini文件
vi /opt/unixODBC/etc/odbcinst.ini
odbcinst.ini
[ODBC] Trace = yes TraceFile = /opt/unixODBC/sql.log UsageCount = 2 [PostgreSQLODBC] Description = PostgreSQL driver for linux Driver = /usr/lib64/unixODBC/libodbcpsql.so Setup = /usr/lib64/unixODBC/libodbcpsqlS.so FileUsage = 1 CPReuse = 5 CPTimeout = 5 UsageCount = 2
配置odbc.ini 文件
vi /opt/unixODBC/etc/odbc.ini
odbc.ini
[Postgres] Driver = PostgreSQLODBC Description = Test on PostgreSQL Database = foo Servername = 192.168.1.155 UserName = sdbadmin Port = 5432 ReadOnly = No
加载配置文件
/opt/unixODBC/bin/odbcinst -i -d -f /opt/unixODBC/etc/odbcinst.ini
5 启动odbc 进行连接测试
/opt/unixODBC/bin/isql -v Postgres
查询 test 表和 chen表
能成功查询出来数据了
参考博客:
http://www.unixodbc.org/odbcinst.html
http://linux.vbird.org/linux_basic/0520rpm_and_srpm.php