常见原因及解决方法:
1. postgres_fdw.so 与 PostgreSQL 主程序版本不匹配
postgres_fdw.so 是针对某个特定版本的 PostgreSQL 编译的。如果你现在运行的是 PostgreSQL 17,但这个 .so 文件是从旧版本(如 PG16)中复制或保留下来的,就会出问题。
解决方法:确认并重新安装正确版本的 postgres_fdw 扩展。
sudo yum reinstall postgresql17-contrib
2. 多个 PostgreSQL 版本混用
检查你是否有多个 PostgreSQL 版本安装,并可能引用了错误的 lib 路径。
解决方法:确认环境变量和执行路径都是指向 /usr/pgsql-17/ 下的程序和库。
which psql
echo $PATH
3. 自编译 PostgreSQL 或 postgres_fdw 扩展导致 ABI 不一致
如果你自己编译过 PostgreSQL 或扩展模块,而没清理旧的 .so 文件,就可能出现此类问题。
解决方法:清理老的 build 文件,重新编译扩展(确保使用的是 PostgreSQL 17 的 pg_config)
export PATH=/usr/pgsql-17/bin:$PATH
make clean
make
sudo make install
💡 验证方法:
运行以下命令确认 PostgreSQL 和扩展的版本一致:
pg_config --version
ls -l /usr/pgsql-17/lib/postgres_fdw.so