You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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官方仓库安装高版本的开发包:

  1. 先添加PostgreSQL官方YUM源:
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
  1. 禁用CentOS自带的旧版PostgreSQL仓库,避免冲突:
yum-config-manager --disable pgdg92
  1. 安装9.6版本的开发包(这个版本刚好支持那些PG_DIAG宏):
yum install -y postgresql96-devel
  1. 重新编译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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 23:42:40