PostgreSQL 10.1安装orafce扩展遇Float8GetDatum未定义符号错误求助
Float8GetDatum未定义符号错误 你遇到的这个问题本质是orafce扩展的编译版本和PostgreSQL 10.1不匹配,导致生成的orafce.so依赖的符号在PG10.1的环境中找不到。下面是你可以逐一检查的几个关键点:
确认编译orafce时使用的是PG10.1的
pg_config
系统中同时存在PG9.6和PG10.1时,默认的pg_config可能指向旧版本。你可以先执行which pg_config查看路径,确认是否是PostgreSQL 10.1安装目录下的bin/pg_config。如果不是,重新编译orafce时指定正确的路径:./configure PG_CONFIG=/path/to/postgres10/bin/pg_config make clean && make && make install检查orafce版本与PG10.1的兼容性
并非所有orafce版本都支持PostgreSQL 10.x。你需要确认当前使用的orafce版本是否明确标注支持PG10,如果不兼容,下载对应兼容的orafce版本(比如适配PG10的发行版),再重新编译安装。验证pg_upgrade的库路径配置
执行pg_upgrade --check时,系统可能优先加载了旧版本PG的库文件。你可以先设置环境变量指定PG10.1的库路径,再运行检查命令:# Linux系统 export LD_LIBRARY_PATH=/path/to/postgres10/lib:$LD_LIBRARY_PATH # macOS系统 export DYLD_LIBRARY_PATH=/path/to/postgres10/lib:$DYLD_LIBRARY_PATH pg_upgrade --check确认orafce.so安装到了PG10.1的正确目录
用pg_config --pkglibdir获取PG10.1的库目录路径,然后检查该目录下是否存在orafce.so,且文件修改时间是你最近执行make install的时间。如果文件在旧版本PG的库目录里,说明编译安装时指向了旧环境,需要重新按第一步的方法编译安装。重新编译并检查编译日志中的警告
虽然make install没有报错,但编译过程中可能存在被忽略的警告。执行make clean && make,仔细查看输出内容,是否有关于链接旧版PG库、未定义符号的警告信息——这些警告往往是导致最终so文件异常的原因。
内容的提问来源于stack exchange,提问作者JeyJ

