You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过QGIS无法列出远程PostgreSQL模式中的非PostGIS表

QGIS通过SSH隧道连接远程PostgreSQL无法列出模式内的表

问题背景

因客户端无固定IP,未使用pg_hba.conf,而是通过专用Unix用户qgis_user和SSH密钥建立隧道:

ssh -L 5444:localhost:5432 qgis_user@my_remote_host.com

隧道可正常工作,QGIS能创建localhost:5444的PostgreSQL连接,也能看到远程数据库的模式列表,但无法列出模式内的表。连接远程库使用的是常规PostgreSQL用户,且该用户是数据库所有者。

测试情况

  • QGIS连接本地localhost:5432的PostgreSQL时,可正常查看模式、列出表并执行SQL查询。
  • 本地通过psql命令连接远程库:
    psql -U my_remote_pg_user -W -h localhost -p 5444 -d my_remote_pg_database
    
    能正常连接,选择模式、列出表及执行SQL查询均无问题。
  • QGIS连接本地和远程库时均提示未安装PostGIS,但仅需访问非PostGIS表;已尝试在本地和远程安装PostGIS扩展,问题未解决;切换至远程库的public模式也无改善。

环境信息

  • QGIS 3.34
  • 本地及远程系统:Debian 11
  • 本地及远程PostgreSQL:16.1
    SELECT version();
    -- 本地
    PostgreSQL 16.1 (Debian 16.1-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
    -- 远程
    PostgreSQL 16.1 (Debian 16.1-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
    

解决方向

  1. 检查QGIS连接的高级设置

    • 在QGIS的PostgreSQL连接设置中,切换到「高级」标签,取消勾选「仅列出空间表」选项(该选项会过滤非空间表)。
    • 确认「搜索路径」包含目标模式,或设置为$user,public,确保QGIS能识别模式下的表。
  2. 验证PostgreSQL驱动兼容性

    • QGIS依赖libpq库连接PostgreSQL,检查本地libpq版本是否与远程PostgreSQL 16.1兼容。Debian 11默认版本可能偏旧,可安装官方源的libpq16包:
      sudo apt install libpq16
      
    • 重启QGIS后重新测试连接。
  3. 查看QGIS调试日志

    • 打开QGIS「设置」→「选项」→「日志」,设置日志级别为「调试」,尝试连接远程库并查看表,从日志中提取具体错误信息(如SQL执行异常、权限提示等)。
  4. 手动执行SQL查询

    • 通过QGIS「数据库」→「DB管理器」连接远程库,手动执行SELECT * FROM 目标模式.目标表 LIMIT 1;,若能返回数据,说明是QGIS表列表刷新逻辑问题,可尝试手动添加表到图层。

内容的提问来源于stack exchange,提问作者tig12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 15:13:32