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

GitHub工作流测试用例因PG::UndefinedFunction报错求助:array_append函数不存在

排查思路与解决建议

这问题我之前碰到过类似的,虽然你只是做了空格相关的修改,但报错根源大概率和PostgreSQL版本、ActiveMedian兼容性或者数据库环境配置有关,咱们一步步拆解排查:

1. 确认测试环境的PostgreSQL版本

array_append是PostgreSQL的内置函数,但如果你的测试环境PG版本和之前正常运行时发生了变更(比如CI环境自动升级/降级了),可能会引发兼容性问题。

可以在测试环境执行以下命令查看版本:

psql -c "SELECT version();"

对比这个版本和之前测试正常时的PG版本,如果差异较大,优先考虑对齐到之前的稳定版本。

2. 检查ActiveMedian依赖版本

即使你没修改Gemfile,也有可能在某次bundle install时被动更新了ActiveMedian版本,而新版本和当前测试环境的PG存在兼容性冲突。

查看当前锁定的版本:

cat Gemfile.lock | grep active_median

对比这个版本和之前测试正常时的版本,如果不一致,尝试锁定到旧版本(在Gemfile中指定版本号):

gem 'active_median', 'x.x.x' # 替换为之前正常运行的版本号

然后执行bundle install重新安装依赖。

3. 验证数据库搜索路径配置

报错提示找不到array_append,有可能是数据库的搜索路径未包含pg_catalog(内置函数所在的schema)。

在ActiveMedian.create_function调用前,临时添加搜索路径检查和设置:

# 在spec/rails_helper.rb的seed方法中,create_function执行前添加
puts ActiveRecord::Base.connection.execute("SHOW search_path;").first
ActiveRecord::Base.connection.execute("SET search_path TO pg_catalog, public;")

然后重新运行测试,看是否解决问题。

4. 手动执行SQL排查

把报错中的SQL语句手动复制到测试数据库中执行,判断是SQL本身的问题还是测试上下文的问题:

  1. 进入测试数据库:psql your_app_test(替换为你的测试数据库名)
  2. 依次执行报错中的CREATE FUNCTION、DROP AGGREGATE、CREATE AGGREGATE语句

如果手动执行也报错,说明是数据库环境本身的问题;如果手动执行成功,那可能是测试代码执行时的上下文异常(比如事务隔离级别、其他前置操作影响)。

5. 重置测试数据库

有时候数据库状态异常(比如残留的旧函数、损坏的schema)会导致这种奇怪的问题,尝试完全重置测试数据库:

rails db:drop db:create db:migrate RAILS_ENV=test

然后重新运行测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 19:04:07