pgAdmin 4执行查询仅显示列名不展示数据行如何解决
pgAdmin 4查询结果仅显示列头和锁图标、无数据返回的解决方法

问题表现
- 执行查询语句:
SELECT * FROM trading.members - 结果面板仅显示列标题与行首锁定图标,无任何数据行
- 结果区复制按钮置灰未激活,无法执行复制操作
按以下优先级逐一排查修复:
1. 处理未提交的阻塞事务
这是最高发的原因:pgAdmin查询工具如果未开启自动提交,之前执行的增/删/改写操作会持有表锁不释放,后续查询被阻塞就会出现只显示列头、拿不到数据的情况。
直接找到查询工具栏的回滚按钮(带叉号的圆形箭头图标)点击,终止所有未提交的事务,重新执行查询即可恢复。
如果需要避免后续再出现同类问题,可在查询工具栏找到自动提交开关点亮,执行语句后自动提交事务释放锁。
2. 修正结果集行数限制配置
如果误将结果行数限制设为0,pgAdmin不会返回任何数据行:
- 顶部菜单栏打开
文件 > 首选项(英文环境为File > Preferences) - 左侧菜单定位到
查询工具 > 结果网格(Query Tool > Results grid) - 找到
结果行数限制配置项,将值从0改为默认的1000,或根据需求设置更大的阈值,0值代表不返回任何行 - 保存配置后重启查询工具,重新执行语句即可
3. 校验当前账号的表查询权限
如果当前登录数据库的账号没有目标表的SELECT权限,也会导致无法拉取数据:
- 执行以下语句验证权限:
SELECT has_table_privilege(current_user, 'trading.members', 'SELECT');
- 如果返回结果为
f(代表无权限),使用超级管理员账号登录后执行授权语句:
GRANT SELECT ON trading.members TO 当前登录的数据库用户名;
- 授权完成后断开当前连接重连,重新执行查询即可
4. 排查表锁与表数据问题
- 先确认表本身存在数据:用管理员账号执行
SELECT count(*) FROM trading.members;,如果返回值为0说明表是空的,自然无数据可展示 - 如果表有数据但查询无返回,执行以下语句查找阻塞查询的会话:
SELECT blocked_locks.pid AS 被阻塞进程ID, blocking_locks.pid AS 阻塞源进程ID FROM pg_catalog.pg_locks blocked_locks JOIN pg_catalog.pg_locks blocking_locks ON blocked_locks.locktype = blocking_locks.locktype AND blocked_locks.DATABASE IS NOT DISTINCT FROM blocking_locks.DATABASE AND blocked_locks.relation IS NOT DISTINCT FROM blocking_locks.relation AND blocked_locks.page IS NOT DISTINCT FROM blocking_locks.page AND blocked_locks.tuple IS NOT DISTINCT FROM blocking_locks.tuple AND blocked_locks.virtualxid IS NOT DISTINCT FROM blocking_locks.virtualxid AND blocked_locks.transactionid IS NOT DISTINCT FROM blocking_locks.transactionid AND blocked_locks.classid IS NOT DISTINCT FROM blocking_locks.classid AND blocked_locks.objid IS NOT DISTINCT FROM blocking_locks.objid AND blocked_locks.objsubid IS NOT DISTINCT FROM blocking_locks.objsubid AND blocked_locks.pid != blocking_locks.pid WHERE NOT blocked_locks.granted;
- 查到阻塞源进程ID后,执行
SELECT pg_terminate_backend(阻塞源进程ID);杀掉僵死的阻塞会话,重新查询即可
5. 修复前端渲染异常
如果以上配置都无问题,属于pgAdmin前端缓存异常:
- 网页版pgAdmin按
Ctrl+F5强制刷新页面,清空本地缓存后重连 - 桌面版pgAdmin直接退出进程重启,若仍无效可删除用户目录下的pgAdmin缓存文件夹后重试
内容的提问来源于stack exchange,提问作者Chuks Joy
相关产品推荐
相关产品推荐

