如何解决Navicat连接VMware中CentOS Docker PostgreSQL无表显示问题
1. 确认Navicat连接的数据库是否匹配
你的student表存在于template1数据库中,但Navicat默认连接后可能自动选中postgres数据库。切换到左侧导航栏的template1数据库,再查看表列表。
2. 检查表的权限与所有者
进入容器内的PostgreSQL,执行以下命令查看表的所有者:
SELECT tableowner FROM pg_tables WHERE tablename = 'student';
如果表的所有者不是你连接Navicat使用的postgres用户,执行权限赋予命令:
GRANT ALL PRIVILEGES ON TABLE student TO postgres; GRANT SELECT ON TABLE student TO postgres;
3. 排查Navicat的表筛选规则
右键点击template1数据库下的「表」选项,选择「筛选」,确认没有设置过滤条件(比如仅显示特定所有者的表),取消不必要的筛选后刷新表列表。
4. 验证数据卷挂载的正确性
你的启动命令中数据卷挂载路径为/var/lib/pgsql:/var/lib/postgresql/data,需检查CentOS端目录权限:
- 执行
ls -ld /var/lib/pgsql,确认所有者为UID=999的用户(对应容器内的postgres用户) - 权限不符时执行:
chown -R 999:999 /var/lib/pgsql
也可以临时移除数据卷挂载,重新启动容器并手动创建student表,测试Navicat是否能正常显示,排除数据卷路径异常问题。
5. 检查表所在的Schema
执行SQL确认表的Schema:
SELECT table_schema FROM pg_tables WHERE tablename = 'student';
如果表不在默认的public Schema中,右键数据库→「属性」→「高级」,将对应Schema添加到「可见的schema」列表中。
6. 重启相关服务
关闭Navicat,重启PostgreSQL容器:
docker restart postg11
重新打开Navicat连接数据库,刷新表列表。
内容的提问来源于stack exchange,提问作者Ting
相关产品推荐
相关产品推荐

