3

每当我尝试使用@supabase/supabase-js 查询数据库时,都会出现错误。

error: {
    hint: null,
    details: null,
    code: '42501',
    message: 'permission denied for schema public'
}

我认为这与我用来处理迁移的 Prisma 有关。当我只是点击原型时,客户端工作正常,但设置 Prisma 后,它不再工作了。

对于如何解决这个问题,有任何的建议吗?我真的很想能够一起使用 Supabase REST API 和 Prisma。

4

3 回答 3

4

原因:当您执行prisma migrate resetprisma migrate dev在远程 Supbase 数据库中时,您可能需要重置它。重置数据库会删除整个数据库并重新创建它。资源

这将清除GRANTPostgREST 工作所需的所有 s 您可以在 PostgREST 文档中找到错误:

https://postgrest.org/en/latest/tutorials/tut0.html?highlight=42501#step-5-run-postgrest

解决方案1:创建一个全新的项目并仅prisma migrate deploy在远程数据库上使用。

解决方案 2:通过授予对表的访问权限来手动修复授权

您可以在全新的 Supabase 项目和损坏的数据库上运行以下 SQL 时检查差异,以观察差异。

SELECT *
FROM information_schema.role_table_grants 
WHERE table_schema='public' and table_name='members'

以下默认授权取自https://github.com/supabase/supabase/blob/a2fc6d592cb4ea50fd518b99db199a31912040b9/docker/volumes/db/init/00-initial-schema.sql#L26-L29的 supabase github 存储库

grant usage on schema public to postgres, anon, authenticated, service_role;
alter default privileges in schema public grant all on tables to postgres, anon, authenticated, service_role;
alter default privileges in schema public grant all on functions to postgres, anon, authenticated, service_role;
alter default privileges in schema public grant all on sequences to postgres, anon, authenticated, service_role;

alter default privileges for user supabase_admin in schema public grant all
    on sequences to postgres, anon, authenticated, service_role;
alter default privileges for user supabase_admin in schema public grant all
    on tables to postgres, anon, authenticated, service_role;
alter default privileges for user supabase_admin in schema public grant all
    on functions to postgres, anon, authenticated, service_role;

这是示例表的默认权限列表members

设保人 受赠人 表目录 表模式 表名 特权类型 is_grantable with_hierarchy
postgres postgres postgres 上市 会员 插入 是的
postgres postgres postgres 上市 会员 选择 是的 是的
postgres postgres postgres 上市 会员 更新 是的
postgres postgres postgres 上市 会员 删除 是的
postgres postgres postgres 上市 会员 截短 是的
postgres postgres postgres 上市 会员 参考 是的
postgres postgres postgres 上市 会员 扳机 是的
postgres 匿名 postgres 上市 会员 插入
postgres 匿名 postgres 上市 会员 选择 是的
postgres 匿名 postgres 上市 会员 更新
postgres 匿名 postgres 上市 会员 删除
postgres 匿名 postgres 上市 会员 截短
postgres 匿名 postgres 上市 会员 参考
postgres 匿名 postgres 上市 会员 扳机
postgres 认证 postgres 上市 会员 插入
postgres 认证 postgres 上市 会员 选择 是的
postgres 认证 postgres 上市 会员 更新
postgres 认证 postgres 上市 会员 删除
postgres 认证 postgres 上市 会员 截短
postgres 认证 postgres 上市 会员 参考
postgres 认证 postgres 上市 会员 扳机
postgres 服务角色 postgres 上市 会员 插入
postgres 服务角色 postgres 上市 会员 选择 是的
postgres 服务角色 postgres 上市 会员 更新
postgres 服务角色 postgres 上市 会员 删除
postgres 服务角色 postgres 上市 会员 截短
postgres 服务角色 postgres 上市 会员 参考
postgres 服务角色 postgres 上市 会员 扳机
于 2021-10-03T16:47:04.463 回答
0

我遇到了同样的问题,我只是在 Supabase 上创建了一个全新的项目,然后“npx prisma migrate dev”重新生成我的表,它就像一个魅力!我不知道我什么时候破坏了我的 Supabase 项目。如果您因为有数据而无法重新生成表,请考虑将数据迁移到新项目,因为它确实有效!

于 2021-09-12T05:27:37.913 回答
0

我之前使用 Flyway“清理”功能(删除模式中的所有内容,以便您可以再次运行迁移)破坏了我的 Supabase 项目。

你可以在这里看到它的讨论:https ://github.com/supabase/supabase/discussions/344#discussioncomment-182886

似乎 Supabase 项目模式中有一堆特定于 Supabase 的配置,如果你把它弄乱了——就会发生奇怪的事情。

您可能想查看 Prisma 是否对架构做了任何您没有意识到它正在做的事情。

于 2021-05-16T01:42:17.997 回答