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

PostgreSQL 13安装Apache AGE 1.3.0时出现undefined symbol错误求助

编译安装PostgreSQL 13 + Apache AGE 1.3.0时加载age.so提示undefined symbol: hash_any_extended的解决方法

问题场景

  • 源码编译PostgreSQL 13(REL_13_STABLE分支)
  • 搭配官方标注兼容的Apache AGE 1.3.0(release/PG13/1.3.0分支)
  • 执行CREATE EXTENSION age;时触发错误:
postgres=# CREATE EXTENSION age;
ERROR:  could not load library "/usr/local/pgsql-13/lib/age.so": /usr/local/pgsql-13/lib/age.so: undefined symbol: hash_any_extended
  • 已确认age.so存在于指定目录,但仍报版本兼容类错误

错误原因

hash_any_extended是PostgreSQL 14及以上版本才引入的哈希函数接口,PostgreSQL 13并不包含该函数。出现这个问题的核心原因是编译AGE时,系统中存在更高版本的PostgreSQL开发头文件或库,导致AGE编译时错误链接到了高版本PG的接口,而非你指定的PG13。

即便你切换到了PG13兼容的AGE分支,如果编译环境的pg_config指向高版本PostgreSQL(比如14+),或者系统中预先安装了高版本PG的开发包,AGE会默认使用高版本的接口编译,最终生成的age.so依赖14+的函数,在PG13环境中加载自然会触发未定义符号的错误。

解决方法

1. 强制指定PG13的编译环境

编译AGE前,必须明确指定PG13的pg_config路径,避免系统默认的高版本PG干扰:

# 进入AGE源码目录
cd age
# 清理之前的编译残留
make clean
# 指定PG13的pg_config路径(替换为你的实际安装路径)
PG_CONFIG=/usr/local/pgsql-13/bin/pg_config make
# 安装到PG13的扩展目录
PG_CONFIG=/usr/local/pgsql-13/bin/pg_config make install

2. 清理系统中的高版本PG开发文件

如果系统中安装了PostgreSQL 14+的开发包,建议暂时卸载,防止编译时被优先调用:

  • Debian/Ubuntu系统:
sudo apt remove postgresql-server-dev-14
  • RHEL/CentOS系统:
sudo yum remove postgresql14-devel

3. 验证编译环境的正确性

编译前先确认pg_config指向的是PG13:

/usr/local/pgsql-13/bin/pg_config --version
# 正确输出应为:PostgreSQL 13.x

4. 重启服务并重新创建扩展

完成上述步骤后,重启PostgreSQL 13服务,再执行扩展创建命令:

# 重启PG13服务(根据你的启动方式调整)
sudo systemctl restart postgresql-13
# 进入psql执行
CREATE EXTENSION age;

内容的提问来源于stack exchange,提问作者ahmed_131313

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 14:02:20