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

GitHub Actions中PostgreSQL15+pgvector+Rails7报错vector.control未找到

GitHub Actions中PostgreSQL 15启用pgvector扩展失败的排查与解决

问题概述

在GitHub Actions工作流中运行Rails测试套件时,执行enable_extension 'vector'迁移时触发错误:

ActiveRecord::StatementInvalid: PG::UndefinedFile: ERROR: could not open extension control file "/usr/share/postgresql/1***/extension/vector.control": No such file or directory

已确认信息:

  • 环境仅运行PostgreSQL 15版本
  • vector.control文件存在于/usr/share/postgresql/15/extension/路径,权限与其他扩展一致
  • 已通过apt-get及手动方式安装pgvector,安装日志显示配置完成
  • 安装后已重启PostgreSQL
  • 已将文件路径加入环境变量
  • 容器为ubuntu-latest,用到redis:alpine镜像,Ruby版本3.2.2,所有gem安装正常

可能原因及解决步骤

1. 确保pgvector与PostgreSQL版本严格匹配

ubuntu-latest的apt源中,pgvector分版本提供对应包(如postgresql-15-pgvector适配PostgreSQL 15),若仅执行apt-get install pgvector,可能安装的是适配其他PostgreSQL版本的包,导致扩展文件路径不匹配。

解决操作:
在工作流的安装步骤中,明确指定安装对应版本的pgvector:

sudo apt-get update
sudo apt-get install -y postgresql-15-pgvector

2. 验证PostgreSQL实际使用的扩展路径

PostgreSQL的extension_dir配置可能未指向预期路径,导致无法找到vector扩展文件。

解决操作:
在工作流中添加步骤,检查当前PostgreSQL实例的扩展路径:

sudo -u postgres psql -c "SHOW extension_dir;"

如果输出不是/usr/share/postgresql/15/extension/,需修改PostgreSQL配置文件(如/etc/postgresql/15/main/postgresql.conf),设置extension_dir = '/usr/share/postgresql/15/extension/',然后重启服务。

3. 确认工作流步骤顺序与服务重启有效性

若在启动PostgreSQL服务后才安装pgvector,即使后续重启,可能存在服务未彻底重载的情况。

解决操作:
调整工作流步骤顺序为:

  1. 安装PostgreSQL 15
  2. 安装postgresql-15-pgvector
  3. 启动PostgreSQL服务
  4. (可选)添加服务就绪检查:
until sudo -u postgres pg_isready; do sleep 1; done

若必须先启动服务再安装扩展,需执行彻底重启命令:

sudo systemctl restart postgresql
# 或针对特定版本实例
sudo pg_ctlcluster 15 main restart

4. 验证PostgreSQL运行用户的文件访问权限

虽然文件权限显示正常,但PostgreSQL以postgres用户运行,需确认该用户能读取vector.control文件。

解决操作:
在工作流中添加权限验证步骤:

sudo -u postgres ls -l /usr/share/postgresql/15/extension/vector.control

若输出提示权限不足,调整文件权限:

sudo chmod 644 /usr/share/postgresql/15/extension/vector.control
sudo chown postgres:postgres /usr/share/postgresql/15/extension/vector.control

5. 排除Rails迁移的环境变量问题

确保Rails连接的PostgreSQL实例是安装了pgvector的那个,避免因数据库连接配置错误(如指向其他容器或实例)导致的扩展找不到问题。

解决操作:
在迁移步骤前,添加验证步骤:

# 验证数据库连接
bundle exec rails db:version
# 尝试直接通过psql启用扩展
sudo -u postgres psql -d your_test_db_name -c "CREATE EXTENSION IF NOT EXISTS vector;"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 00:37:35