使用Prisma+Supabase执行db push时触发pgsodium_trg_mask_update权限错误
解决Prisma + Supabase执行
prisma db push时的权限错误 问题根源
Supabase默认启用了pgsodium加密扩展,pgsodium_trg_mask_update是该扩展自带的事件触发器。你的数据库用户没有这个触发器的所有权,而prisma db push在同步Schema变更时会触碰到相关权限限制,导致报错。
可行解决方法
方案一:临时调整触发器所有权(开发环境适用)
登录Supabase控制台的SQL编辑器,执行以下SQL(替换your_db_user为Prisma连接用的数据库账号,通常是postgres):ALTER EVENT TRIGGER pgsodium_trg_mask_update OWNER TO your_db_user;执行完成后重新运行
npx prisma db push即可。方案二:使用迁移命令替代
db push(生产环境推荐)
相比直接推送Schema变更,Prisma迁移更安全可控,且不易触发权限问题:- 生成迁移文件:
npx prisma migrate dev --name initial-setup(首次初始化用,后续变更直接运行npx prisma migrate dev) - 部署到Supabase:
npx prisma migrate deploy
- 生成迁移文件:
方案三:禁用pgsodium扩展(谨慎操作)
如果你不需要Supabase的加密功能,可以在控制台的数据库设置中禁用pgsodium扩展,但这会影响依赖加密的功能,仅在确认无相关需求时使用。
额外注意
操作前的数据丢失警告是因为你的Schema变更会删除含非空值的列,务必确认业务允许该操作,或调整Schema逻辑避免删除必要数据。
内容的提问来源于stack exchange,提问作者Mel Macaluso
相关产品推荐
相关产品推荐

