pgAdmin创建的表在psql中无法找到,二者无关联如何解决?
解决psql看不到pgAdmin创建的表及角色不同步问题
一、psql执行\dt看不到表的解决步骤
- 确认连接的是同一个数据库
- 在pgAdmin里找到你建表的数据库,记好名称;psql里执行
SELECT current_database();,对比结果和pgAdmin里的库名是否一致,注意大小写——PostgreSQL默认对标识符大小写不敏感,但如果创建时用双引号括了名称,就会严格区分大小写。
- 在pgAdmin里找到你建表的数据库,记好名称;psql里执行
- 检查表所在的schema
- 若建表时指定了非默认schema,psql默认只会搜索
search_path配置里的schema:- 右键pgAdmin里的目标表→属性→常规,查看表所属的schema;
- psql里执行
SHOW search_path;,确认该schema是否在列表中; - 若不在,临时生效可执行
SET search_path TO public, 你的schema名称;,要永久生效则修改角色默认路径:ALTER ROLE 你的角色名 SET search_path TO public, 你的schema名称; - 也可以直接用
\dt 你的schema.*强制查看指定schema下的所有表。
- 若建表时指定了非默认schema,psql默认只会搜索
- 确认当前psql角色的访问权限
- psql里执行
SELECT current_user;查看当前登录角色,即使表的所有者是超级用户,当前角色无访问权限也看不到表。给权限可执行:GRANT SELECT ON 你的表名 TO 当前角色名; -- 需要全权限则用:GRANT ALL PRIVILEGES ON 你的表名 TO 当前角色名;
- psql里执行
- 验证表的实际存在性
- 在pgAdmin里执行
SELECT * FROM 你的表名;确认表正常;psql里执行相同查询,若能查到数据,说明是\dt的显示问题(大概率是schema不在search_path);若查不到,说明当前连接的数据库/角色下确实没有该表。
- 在pgAdmin里执行
二、psql创建的角色在pgAdmin不显示的处理
- 已手动注册角色仍看不到的话,右键pgAdmin里的「登录/组角色」→刷新列表试试;
- 若还是不行,确认pgAdmin和psql连接的是同一个PostgreSQL实例:对比pgAdmin服务器的主机、端口配置,和psql连接时的
-h、-p参数是否一致(比如psql命令为psql -h localhost -p 5432 -U 角色名 CMS,对应检查pgAdmin的服务器连接属性)。
三、核心前提:确保pgAdmin和psql连接同一PostgreSQL实例
- 两者要共享数据,必须连接同一个服务:
- pgAdmin里右键服务器→属性→连接,查看主机地址、端口、数据库名;
- psql里执行
SELECT version();和SHOW port;,对比版本、端口是否和pgAdmin配置完全一致。
内容的提问来源于stack exchange,提问作者xblackcat
相关产品推荐
相关产品推荐

