PostgreSQL用户有表权限却无法用\dt列出表如何排查解决
问题根因
ko用户的默认search_path配置未包含command schema。PostgreSQL执行无schema前缀的对象查询、元数据命令(比如\dt)时,只会遍历search_path中列出的schema,不会主动扫描未纳入路径的schema。
当前ko已经拥有command schema下所有表的全量操作权限,不存在权限缺失:带command.前缀可以正常查询login表已经验证了这一点,问题完全出在路径配置上。
解决步骤
方案1:临时生效(仅当前会话有效)
ko用户连接数据库后,直接执行以下SQL配置当前会话的搜索路径:
SET search_path TO command, public;
执行后立刻验证:
- 运行
\dt即可正常列出command schema下的所有表 - 运行
select * from login;不会再报relation不存在的错误
断开当前连接后配置会失效。
方案2:永久生效(ko用户所有新连接自动生效)
用数据库超级用户或者数据库所有者jo账号连接数据库,执行以下SQL修改ko用户的默认搜索路径配置:
ALTER ROLE ko SET search_path TO command, public;
执行完成后,断开ko当前的所有数据库连接,重新连入即可永久生效。后续可以用ko账号执行SHOW search_path;确认返回结果中包含command,即配置正确。
内容的提问来源于stack exchange,提问作者mourad semi
相关产品推荐
相关产品推荐

