无法连接PostGIS数据库:QGIS无法查看云PostgreSQL数据表求助
嘿,作为刚入坑PostgreSQL和PostGIS的新手,遇到连接QGIS后看不到数据表的问题真的太常见了!我帮你梳理几个最可能的排查方向,一步步来解决:
1. 先确认PostGIS扩展是否正确启用
不管是本地还是云端的PostgreSQL数据库,要让QGIS识别空间数据表,必须先给目标数据库安装PostGIS扩展——这是新手最容易踩的坑!
你可以在PgAdmin4里打开对应的数据库,启动SQL查询工具,执行以下命令:
CREATE EXTENSION IF NOT EXISTS postgis; CREATE EXTENSION IF NOT EXISTS postgis_topology;
执行完后,用这条命令验证是否安装成功:
SELECT postgis_version();
如果是云端AWS的数据库,新建时默认不会自带PostGIS,一定要手动装!
2. 检查QGIS连接的配置细节
QGIS 2.18连接PostgreSQL时,有几个容易忽略的小细节:
- 连接时务必选对目标数据库名称,别不小心连到了默认的
postgres库或者其他无关库 - 切换到「空间数据表」标签页前,记得点击右上角的刷新按钮——QGIS不会自动实时加载新表
- 留意「仅显示空间数据表」的复选框:如果你的表是普通非空间SQL表,要把这个勾去掉才能看到;如果是空间表,得确保表中存在
geometry类型的空间字段,不然勾上后也会被过滤掉
3. 数据表的权限是否到位
你用管理员身份登录PgAdmin4,但QGIS连接时用的账号未必有对应数据表的SELECT权限!哪怕是管理员账号,新建表后权限也可能没自动继承,更别说云端AWS的账号可能有默认权限限制。
可以在PgAdmin4里执行以下命令给QGIS连接账号授权:
-- 给现有表授权 GRANT SELECT ON ALL TABLES IN SCHEMA public TO 你的QGIS连接账号; -- 给未来新建的表设置默认授权 ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO 你的QGIS连接账号;
4. 版本兼容性问题
你本地是PostgreSQL 10,云端是9.6.5,QGIS 2.18.5对PostGIS版本的兼容性需要注意。如果云端PostGIS的版本过高,QGIS 2.18可能无法正常识别。
建议先检查云端PostGIS的版本(用之前的postgis_version()命令),如果确实存在版本不兼容,要么升级QGIS到3.x版本(对新PostGIS支持更好,稳定性也更强),要么确认云端PostGIS版本在QGIS 2.18的支持范围内。
5. 云端数据库的网络访问权限
AWS RDS的PostgreSQL默认只允许安全组内的IP访问,如果你本地IP不在安全组的入站规则里,哪怕QGIS显示连接成功,也拿不到数据。
你可以登录AWS控制台,找到对应的RDS实例,检查安全组的入站规则,把你的本地公网IP添加进去(测试时可以临时放开0.0.0.0/0,但测试完一定要改回去,避免安全风险)。另外,连接时要填对AWS RDS的端点地址和默认端口5432,别填错了!
内容的提问来源于stack exchange,提问作者Theo F




