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

PostgreSQL启动报错:undefined symbol: EVP_cast5_cbc(pgcrypto扩展问题)

问题解决:PostgreSQL启动时pgcrypto报undefined symbol: EVP_cast5_cbc错误

原因分析

  • pgcrypto未关联OpenSSL库:从ldd输出可见,pgcrypto.so未依赖任何OpenSSL相关库,但pgcrypto的加密算法依赖OpenSSL提供支持,这是核心问题。
  • OpenSSL 3.0算法兼容性:EVP_cast5_cbc属于CAST5算法,在OpenSSL 3.0中该算法被归类到legacy provider,默认未启用,即便关联了OpenSSL也可能无法找到符号。

解决步骤

1. 重新编译PostgreSQL,确保关联OpenSSL

源码编译时需明确指定OpenSSL路径,让pgcrypto正确链接加密库:

# 进入PostgreSQL源码目录
cd /path/to/postgresql-15.6
# 清理旧编译文件
make clean
# 配置编译参数(OpenSSL默认安装可省略路径,否则替换为实际安装路径)
./configure --prefix=/usr/local/pgsql --with-openssl=/usr/local/ssl
# 重新编译并安装
make world
make install-world

2. 启用OpenSSL 3.0的legacy provider

若重新编译后仍报错,需修改OpenSSL配置启用遗留算法:

  1. 编辑OpenSSL配置文件(通常为/etc/ssl/openssl.cnf),找到[provider_sect]段,修改为:
[provider_sect]
default = default_sect
legacy = legacy_sect

[default_sect]
activate = 1

[legacy_sect]
activate = 1
  1. 保存配置后重启PostgreSQL:
pg_ctl restart -D /usr/local/pgsql/data

3. 验证库关联状态

重新编译后执行以下命令,确认pgcrypto.so已关联OpenSSL库:

ldd /usr/local/pgsql/lib/pgcrypto.so

输出中应包含libssl.so、libcrypto.so等OpenSSL相关依赖项。

验证修复效果

启动PostgreSQL服务:

pg_ctl start -D /usr/local/pgsql/data

服务正常启动后,进入数据库验证pgcrypto功能:

CREATE EXTENSION IF NOT EXISTS pgcrypto;
SELECT crypt('test_password', gen_salt('bf'));

若能正常返回加密结果,说明问题已解决。

内容的提问来源于stack exchange,提问作者Definitly not me

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:53:41