如何导出含Shapefile的PostgreSQL数据库供他人导入并连接QGIS?
嘿,这个需求我太熟悉了!之前帮团队里的小伙伴导出过带空间数据的PostgreSQL库,刚好能给你一套完整的操作方案,分图形界面和命令行两种方式,你按需选就行:
方法一:用pgAdmin III图形界面导出(适合偏好可视化操作的同学)
- 打开pgAdmin III,找到你要导出的目标数据库,右键点击它,选择「Backup...」(备份)选项
- 在弹出的备份窗口里,先选好输出文件的路径和文件名,建议后缀用
.backup——这是PostgreSQL专用的备份格式,能完整保留空间数据(也就是你导入的Shapefile对应的PostGIS图层),兼容性拉满 - 关键选项设置别漏:
- 「Format」(格式)选「Custom, tar」,这个格式支持压缩,还能完美保留空间数据的结构
- 「Dump Options」(转储选项)里,一定要勾选「Include CREATE DATABASE statement」(包含创建数据库语句),这样对方导入时不用手动建库;另外如果你的Shapefile默认存在
publicschema里,确认「Schema」选项选中了public,怕漏的话直接选「All schemas」也没问题 - 想压缩备份文件的话,在「Compression」里选个中间级别(比如5),平衡压缩率和导出速度
- 最后点击「Backup」开始导出,等进度条走完就搞定了
方法二:用pg_dump命令行导出(适合喜欢高效操作的同学)
命令行操作更灵活,适合批量或远程操作,执行下面的命令就行:
pg_dump -U your_username -F c -b -v -f /path/to/your/backup_file.backup your_database_name
给你解释下关键参数:
-U your_username:替换成你的PostgreSQL用户名-F c:指定备份格式为custom(和pgAdmin里的tar格式一致,支持压缩和空间数据)-b:强制包含大对象,确保Shapefile对应的空间数据完整导出-v:显示详细导出过程,方便排查问题-f /path/to/your/backup_file.backup:替换成你要保存备份文件的路径和文件名your_database_name:替换成目标数据库的名称
给对方的导入步骤(一定要同步给对方哦)
不管用哪种方式导出,对方都需要按下面的步骤导入,还要注意前置条件:
前置要求
对方的本地PostgreSQL必须安装PostGIS扩展——因为你的数据库里有Shapefile转来的空间数据,没有PostGIS会直接报错。如果对方没装,让他们先安装PostGIS,然后在新建数据库里执行CREATE EXTENSION postgis;
用pgAdmin III导入
- 打开pgAdmin III,右键点击「Databases」,选择「Restore...」(恢复)
- 选择你发给对方的
.backup文件,「Format」选「Custom or tar」 - 「Restore Options」里,确认「Create database before restoring」(恢复前创建数据库)是勾选状态,这样会自动创建和原数据库同名的库
- 点击「Restore」开始导入,完成后就能看到所有数据和空间图层了
用pg_restore命令行导入
如果对方喜欢命令行,先创建数据库(如果还没建的话):
createdb -U their_username -T template_postgis their_database_name
然后执行导入命令:
pg_restore -U their_username -d their_database_name -v /path/to/backup_file.backup
连接QGIS的收尾步骤
对方导入完成后,连接QGIS的操作和你之前完全一致:
- 打开QGIS,添加「PostgreSQL」数据源
- 填写本地服务器信息(主机一般是
localhost,端口默认5432,输入用户名、密码后选择刚导入的数据库) - 连接成功后就能看到所有空间图层,直接添加到地图里就能用啦
内容的提问来源于stack exchange,提问作者Fezofchekov




