PostgreSQL空间数据库创建备份恢复(PostGIS vs ArcGIS)
梯子
PostGIS
创建
安装就不必介绍了,windows下使用安装工具Application Stack Builder
,选择空间扩展PostGIS即可自动安装
然后新建库后,在库中执行以下语句创建控件扩展
CREATE EXTENSION postgis
也可以创建数据库时选择postgis的模板库创建
create database postgisdb template postgis_template;
新建数据库后添加postgis扩展后会发现库内public模式下函数序列触发器等都会增加一些postgis相关功能
然后就可以通过PostGIS Shapefile and DBF Loader
工具导入shp数据
备份
postgersql的备份恢复主要有
- 增量备份和基于时间点恢复(RITR)
- pg_dump和pg_dumpall进行转储,从SQL转储文件恢复
- 文件系统级别备份
这里我们使用简单,容易掌握的pg_dump
命令,一般在安装目录bin下
pg_dump备份单库,不导出角色和表空间相关信息
pg_dump -h localhost -U postgres postgisdb > D:\backup\postgisdb.bak
有一些参数选项可以参考(很多,具体不列了,执行help可以查看到)
pg_dump --help
恢复
恢复可以使用psql
psql -h localhost -U postgres -d postgisdb2 < D:\backup\postgisdb.bak
恢复时可以指定不同的数据库,如果pg_dump时-C创建数据库,那也可以不用先新建数据库
postgis库的恢复备份还是挺简单的,所有的东西都在public下
ArcGIS
创建
ArcGIS要连接到postgresql,需要将postgresql安装目录lib下的libeay32.dll、libiconv-2.dll、libintl-8.dll、libpq.dll 和 ssleay32.dll
拷贝到ArcGIS Desktop的安装目录bin下
将ArcGIS Desktop目录DatabaseSupport\PostgreSQL下的st_geometry.dll
拷贝到postgresql的lib下
使用ArcGIS工具箱中Create Enterprise Geodatabase
工具创建SDE,完事后会在创建一个sde登陆角色
并在库中创建一个sde模式
,包含诸多函数序列管理表等。(注意:ArcGIS虽然可以在系统库postgres中创建SDE扩展,然并连不上,ArcGIS不允许连接访问系统数据库)
然后ArcGIS可以连接该数据库,并且进行空间数据管理操作。(注意:默认ArcGIS创建空间数据,只能创建在和登陆用户同名的模式下)
备份
我们可以向上面PostGIS备份恢复一样,直接备份整个库
恢复
如果恢复至同名数据库,像上面恢复是没有问题的
但如果数据库改名了,则会有惊喜发生,ArcGIS管理空间报底层gdb_release之类的错误
,同样的问题不止恢复库时,修改数据库名称也不像其他库那么随心所欲,以含SDE扩展的库为模板创建新库也会有问题
ArcGIS SDE未见文档介绍内部结构逻辑,只能猜测大概,或不准确,愿闻其详
ArcSDE空间数据创建时会在SDE管理表里注册相关信息
,比如空间参考,列啊,表的唯一标识等,便于它做数据管理、版本控制
修改库名后,ArcSDE管理就出问题,主要是一些注册项,安装SDE时也会把该库的信息注册到SDE管理表
中去,所以新库名,它就不认识了
如果修改了库名,我们找到以下表
select * from sde.gdb_items
you need modify : name physicalname path etc...
update sde.sde_table_registry set database_name='testdb';
update sde.sde_column_registry set database_name='testdb';
update sde.sde_geometry_columns set f_table_catalog='testdb';
update sde.sde_raster_columns set database_name='testdb';
update sde.sde_layers set database_name='testdb';
然后就一切正常
当然我们建议不轻易改库名
这就是商业软件,足够强大不够灵活,封装和灵活总会互相博弈
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构