通过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命令连接远程库:
能正常连接,选择模式、列出表及执行SQL查询均无问题。psql -U my_remote_pg_user -W -h localhost -p 5444 -d my_remote_pg_database - 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
解决方向
检查QGIS连接的高级设置
- 在QGIS的PostgreSQL连接设置中,切换到「高级」标签,取消勾选「仅列出空间表」选项(该选项会过滤非空间表)。
- 确认「搜索路径」包含目标模式,或设置为
$user,public,确保QGIS能识别模式下的表。
验证PostgreSQL驱动兼容性
- QGIS依赖
libpq库连接PostgreSQL,检查本地libpq版本是否与远程PostgreSQL 16.1兼容。Debian 11默认版本可能偏旧,可安装官方源的libpq16包:sudo apt install libpq16 - 重启QGIS后重新测试连接。
- QGIS依赖
查看QGIS调试日志
- 打开QGIS「设置」→「选项」→「日志」,设置日志级别为「调试」,尝试连接远程库并查看表,从日志中提取具体错误信息(如SQL执行异常、权限提示等)。
手动执行SQL查询
- 通过QGIS「数据库」→「DB管理器」连接远程库,手动执行
SELECT * FROM 目标模式.目标表 LIMIT 1;,若能返回数据,说明是QGIS表列表刷新逻辑问题,可尝试手动添加表到图层。
- 通过QGIS「数据库」→「DB管理器」连接远程库,手动执行
内容的提问来源于stack exchange,提问作者tig12
相关产品推荐
相关产品推荐

