本地运行Supabase配合DataGrip时查询public.users表提示不存在如何解决
问题解决方案
以下是按优先级从高到低的排查修复步骤:
- 优先确认是否连错数据库
这是本地Docker部署Supabase最常见的问题:如果你的Mac本地本来就安装过PostgreSQL服务,启动Docker版Supabase时5432端口可能冲突,Docker会自动映射到其他端口,你很可能在DataGrip中连接的是本地原生PostgreSQL,在里面创建了表,而Supabase服务实际连接的是Docker容器内的PostgreSQL实例,库里根本没有你创建的表。
校验方法:- 在DataGrip的查询控制台执行SQL:
SELECT inet_server_addr(), inet_server_port();,记录返回的IP和端口 - 在你的Next.js API代码中临时加一段查询:
let { data: dbInfo } = await supabase.raw('SELECT inet_server_addr(), inet_server_port()') console.log('Supabase连接的数据库信息:', dbInfo) - 对比两边的结果,如果不一致,修改DataGrip的连接配置,端口填写
docker ps命令中supabase-db容器映射到本地的端口即可。
- 在DataGrip的查询控制台执行SQL:
- 检查环境变量配置
打印代码中的process.env.NEXT_PUBLIC_SUPABASE_URL和process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY,确认:- SUPABASE_URL是本地Docker Supabase的地址,默认值为
http://localhost:54321,不是云端Supabase的项目地址 - ANON_KEY使用的是本地Supabase初始化时控制台输出的密钥,不是云端项目的密钥
- SUPABASE_URL是本地Docker Supabase的地址,默认值为
- 显式指定schema兜底
初始化Supabase客户端时手动指定查询的schema为public,避免默认配置异常:import { createClient } from '@supabase/supabase-js' const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL const supabaseAnonKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY export const supabase = createClient(supabaseUrl, supabaseAnonKey, { db: { schema: 'public' } }) - 校验数据库角色权限
如果前面步骤都没问题,给API调用使用的anon、authenticated角色授予public schema和表的访问权限,在Supabase的SQL编辑器或者连接到正确库的DataGrip中执行:-- 授予schema访问权限 GRANT USAGE ON SCHEMA public TO anon, authenticated; -- 授予表查询权限,需要增删改权限的话对应添加INSERT/UPDATE/DELETE即可 GRANT SELECT ON ALL TABLES IN SCHEMA public TO anon, authenticated; -- 可选:后续新建的表自动授予权限 ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO anon, authenticated;
内容的提问来源于stack exchange,提问作者sandypockets
相关产品推荐
相关产品推荐

