Postgresql

如何轉儲按空間範圍過濾的 postgreSQL/postgis 範例數據庫?

  • June 14, 2021

我的目標是提取我的 postgres/gis 數據庫的一個子集,以創建一個範例轉儲,該轉儲必須具有與表和視圖之間的關係相同的數據模型,但空間範圍較小。

我的第一個想法是只選擇我空間範圍內的特徵,然後提取這些特徵,但我不確定我能否做到這一點而不會失去數據模型中的一些資訊。

第二個想法是只在新數據庫中導入我想要的數據,用空間範圍(很長)過濾。

第三個想法是完全複製db,然後過濾掉不需要的特徵。

哪個想法最好?是否有第四個想法可以更容易/更快?數據模型相當複雜:https ://github.com/qwat/qwat-data-model

只需使用COPY, 或更好地\COPY使用 PSQL,

COPY { table_name [ ( column_name [, ...] ) ] | ( query ) }
   TO { 'filename' | PROGRAM 'command' | STDOUT }
   [ [ WITH ] ( option [, ...] ) ]

看起來像這樣

\COPY ( SELECT * FROM tbl WHERE ST_Intersects(myextent, tbl.geom) ) TO 'foo.csv' WITH ( format csv )

可能不是最優雅的解決方案,但您可以使用pg_dump實用程序複製 DB,然後使用ogr2ogr實用程序覆蓋新的子集 DB 的空間表中的數據。使用您選擇的裁剪方法執行 pg_restore,然後執行 ogr2ogr。例如,要覆蓋空間數據以將其限制在 shapefile 的範圍內,請執行以下命令:

ogr2ogr -overwrite -update -clipsrc clip_shape.shp PG:"host=subsethost user=subsetloginname dbname=subsetdb password=subsetpassword" PG:"host=originalhost user=originalloginname dbname=originaldb password=originalpassword"

有關可選開關的詳細資訊,請查看 pg_dump 和 ogr2ogr 文件(連結)。將這兩個實用程序結合起來應該可以讓您擺脫困境。

引用自:https://dba.stackexchange.com/questions/130041