CentOS 7编译psqlODBC时connection.c出现未声明标识符错误的解决求助
解决psqlODBC编译时PG_DIAG_*标识符未声明的错误
错误根源拆解
你碰到的这些PG_DIAG_SCHEMA_NAME、PG_DIAG_TABLE_NAME未定义的报错,本质是版本不兼容:
这些带PG_DIAG_前缀的宏,是PostgreSQL的libpq客户端库在9.6版本才新增的错误诊断字段,定义在libpq-fe.h头文件中。而你通过CentOS7官方yum源安装的postgresql-devel是老版本(通常是9.2.x),这个版本的头文件里根本没有这些宏定义;但你选择的psqlODBC 13.02是针对高版本PostgreSQL开发的,编译时会依赖这些新特性,自然会抛出未声明的错误。
两种适配你环境的解决方案
考虑到你使用的是CentOS7+旧版Oracle环境,推荐两种稳妥的解决路径:
路径1:降级psqlODBC到兼容旧PostgreSQL的版本
不需要改动系统里的PostgreSQL依赖,换一个适配9.2版本的psqlODBC即可,比如psqlodbc-10.03.0000(这是支持旧版libpq的最后几个稳定版之一):
# 清理之前的编译目录 rm -rf psqlodbc-13.02.0000/ # 下载适配版本的源码 wget https://ftp.postgresql.org/pub/odbc/versions/src/psqlodbc-10.03.0000.tar.gz tar xzf psqlodbc-10.03.0000.tar.gz cd psqlodbc-10.03.0000/ # 配置时指定你刚编译的新版unixODBC路径 ./configure --with-unixODBC=/usr/local make make install
路径2:升级PostgreSQL开发包到支持新宏的版本
如果你坚持要用新版psqlODBC,可以从PostgreSQL官方仓库安装高版本的开发包:
- 先添加PostgreSQL官方YUM源:
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
- 禁用CentOS自带的旧版PostgreSQL仓库,避免冲突:
yum-config-manager --disable pgdg92
- 安装9.6版本的开发包(这个版本刚好支持那些PG_DIAG宏):
yum install -y postgresql96-devel
- 重新编译psqlODBC,指定新的libpq路径:
cd psqlodbc-13.02.0000/ ./configure --with-pgsql=/usr/pgsql-9.6 --with-unixODBC=/usr/local make make install
后续注意点
- 编译完成后,配置ODBC数据源时要指向新编译的驱动文件(一般在
/usr/local/lib/psqlodbcw.so)。 - 解决完编译问题后,记得测试UTF-8编码的数据访问——新版unixODBC配合适配的psqlODBC应该能解决你之前遇到的编码异常问题。
内容的提问来源于stack exchange,提问作者sers
相关产品推荐
相关产品推荐

