PostgreSQL空間資料庫建立備份恢復(PostGIS vs ArcGIS)
梯子
PostGIS建立備份恢復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目錄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';
然後就一切正常
當然我們建議不輕易改庫名
這就是商業軟體,足夠強大不夠靈活,封裝和靈活總會互相博弈