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

Prisma扩展pgvector在Vitest随机Schema下迁移失败求助

解决Prisma + pgvector随机Schema迁移失败问题

问题根源

pgvector扩展默认安装在public schema中,但你测试用的随机Schema(通过?schema=<随机名>指定)默认搜索路径不包含public,导致无法识别vector类型。

可行解决办法

1. 为每个测试Schema单独安装pgvector

在迁移脚本开头添加扩展安装语句,确保当前Schema内存在vector类型:

CREATE EXTENSION IF NOT EXISTS vector;

-- 后续的表创建逻辑示例
CREATE TABLE "Product" (
  "id" SERIAL PRIMARY KEY,
  "embedding" vector(1536)
);

注意:执行迁移的数据库账号需要具备创建扩展的权限。

2. 调整搜索路径,让随机Schema能访问public的vector类型

在迁移脚本开头设置搜索路径,将public纳入当前Schema的搜索范围:

-- 动态配置搜索路径,包含当前Schema与public
SET search_path TO "$user", public, current_schema();

-- 正常执行表创建操作
CREATE TABLE "Product" (
  "id" SERIAL PRIMARY KEY,
  "embedding" vector(1536)
);

这种方式无需重复安装扩展,适合已在测试数据库的public schema预装好pgvector的场景。

3. 给当前Schema创建vector类型别名

若不想为每个Schema单独安装扩展,可在迁移中为当前Schema创建指向public.vector的类型别名:

-- 创建别名,让当前Schema可通过vector名称访问public中的对应类型
CREATE TYPE vector AS public.vector;

-- 继续执行表创建逻辑
CREATE TABLE "Product" (
  "id" SERIAL PRIMARY KEY,
  "embedding" vector(1536)
);

前提是测试数据库的public schema已安装pgvector扩展。

4. 在DATABASE_URL中直接指定搜索路径

修改测试用的数据库连接字符串,添加搜索路径参数,让所有操作自动包含public:

DATABASE_URL="postgresql://user:password@localhost:5432/testdb?schema=<随机名>&options=-c%20search_path%3D%22%24user%2Cpublic%2C<随机名>%22"

注意URL编码规则:%20代表空格,%3D代表等号,%22代表双引号。

排查验证技巧

迁移执行前,可手动连接测试数据库并切换到目标随机Schema,执行SELECT * FROM pg_type WHERE typname = 'vector';,确认vector类型是否存在,快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 06:12:22