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
相关产品推荐
相关产品推荐

