pgsql-ogr-fdw

pgsql-ogr-fdw 文章目录环境文档用途详细信息环境系统平台Linux x86-64 Red Hat Enterprise Linux 7版本14文档用途本文介绍pgsql-ogr-fdw的使用。详细信息在现代地理信息系统GIS和空间数据分析中PostgreSQL是一个广泛使用的数据库系统特别是其与PostGIS扩展结合后成为了处理空间数据的强大工具。然而在实际应用中往往需要与各种外部数据源进行交互如Shapefiles、GeoJSON、KML等这时候pgsql-ogr-fdw就显得尤为重要。1、简介pgsql-ogr-fdw是PostgreSQL的外部数据包装器基于GDAL/OGR库开发。它允许用户将多种格式的空间数据如 Shapefile、GeoJSON、KML、CSV 等直接映射为PostgreSQL数据库中的虚拟表并通过SQL进行查询和分析无需预先导入数据。结合PostGIS扩展用户可以实现复杂的空间运算如相交、缓冲区分析等形成完整的地理信息处理流水线。pgsql-ogr-fdw基于PostgreSQL平台扩展性PostGIS和GDAL/OGR的功能完整性和数据兼容性具有以下核心优势1广泛的数据格式支持 支持所有GDAL/OGR兼容的矢量数据格式覆盖超过100种常见空间数据格式包括文件格式ESRI Shapefile、GeoJSON、KML、GPKG、CSV、GML、Excel 等网络服务WFSWeb Feature Service、GeoPackage 等2与 PostGIS 深度集成支持将外部几何数据自动转换为PostGIS的geometry类型直接调用空间函数如 ST_Within、ST_Distance。允许通过视图View或 CTE公共表表达式将外部数据与本地表联合查询。3灵活的数据操作动态筛选在创建外部表时通过 SQL 语句预过滤数据。编码处理支持指定字符编码如 GBK、UTF-8解决乱码问题。投影转换利用 PostGIS 的 ST_Transform 函数动态转换坐标系。4轻量级与高性能无需全量导入数据按需读取节省存储空间。支持对常用格式如 GeoJSON、CSV的索引优化查询。2、安装pgsql-ogr-fdw要求PostgreSQL 11及以上版本依赖PostGIS此处忽略PostGIS安装PostGIS安装相对比较困难并且各依赖之间还有版本匹配关系。ogr_fdw源码包从Git下载解压后执行make make install即可安装但需要编译安装用户能够访问到pg_config命令编译安装用户能够访问到gdal-config命令会缺少各种so文件以上解决方案命令错误则在/usr/bin下创建软链接so错误在/usr/lib64下创建软链接。 然后执行create extension ogr_fdw则安装完毕。3、详细功能pgsql-ogr-fdw提供了4个关键函数来帮助用户设置和管理外部数据源包括ogr_fdw_handlerogr_fdw_validatorogr_fdw_version和ogr_fdw_drivers。ogr_fdw_handler是一个用于创建和管理OGR FDW对象的处理器函数定义了如何与外部数据源进行交互包括读取和写入数据的方法通常在创建外部服务器对象时使用并且是通过指定FOREIGN DATA WRAPPER参数来关联到 ogr_fdw的。ogr_fdw_validator函数用于验证传递给ogr_fdw的选项是否合法以及是否正确配置。这对于确保外部数据源能够被正确访问至关重要。当创建或修改外部服务器、外部表等对象时PostgreSQL将自动调用此验证器函数来检查提供的选项。ogr_fdw_version提供了一种方法来查询当前安装的ogr_fdw扩展的版本号。这对于调试问题、确保兼容性或了解所使用的功能特性非常有用。postgres# SELECT ogr_fdw_version();ogr_fdw_version----------------------------OGR_FDW1.1GDAL3.5.1ogr_fdw_drivers函数列出了当前ogr_fdw支持的所有OGR驱动程序。由于OGR支持多种地理空间数据格式了解这些驱动程序可以帮助确定可以连接到哪些类型的数据源。postgres# select ogr_fdw_drivers();ogr_fdw_drivers-------------------------------------------------------------------{ESRIC,PCIDSK,PDS4,VICAR,PDF,MBTiles,EEDA,OGCAPI,ESRI Shapefile,MapInfo File,UK .NTF,OGR_SDTS,S57,DGN,OGR_VRT,Memory,CS V,GML,GPX,KML,GeoJSON,GeoJSONSeq,ESRIJSON,TopoJSON,OGR_GMT,GPKG,SQLite,WAsP,OpenFileGDB,DXF,CAD,FlatGeobuf,Geoconcept,GeoRSS,V FK,PGDUMP,OSM,GPSBabel,OGR_PDS,WFS,OAPIF,EDIGEO,SVG,Idrisi,Elasticsearch,Carto,AmigoCloud,SXF,Selafin,JML,PLSCENES,CSW,VDV,MVT,NGW,MapML,TIGER,AVCBin,AVCE00,HTTP}3.1 ogr_fdw对GIS数据文件或服务的支持力度以下执行ogr_fdw_info -f可以查看ogr_fdw对GIS数据文件或服务是否可读还是可写。[pg14localhost~]$ ogr_fdw_info-f Supported Formats:-PCIDSK(read/write)-PDS4(read/write)-VICAR(read/write)-PDF(read/write)-MBTiles(read/write)-EEDA(readonly)-OGCAPI(readonly)-ESRI Shapefile(read/write)-MapInfo File(read/write)-UK .NTF(readonly)-OGR_SDTS(readonly)-S57(read/write)-DGN(read/write)-OGR_VRT(readonly)-Memory(read/write)-CSV(read/write)-GML(read/write)-GPX(read/write)-KML(read/write)-GeoJSON(read/write)-GeoJSONSeq(read/write)-ESRIJSON(readonly)-TopoJSON(readonly)-OGR_GMT(read/write)-GPKG(read/write)-SQLite(read/write)-WAsP(read/write)-OpenFileGDB(readonly)-DXF(read/write)-CAD(readonly)-FlatGeobuf(read/write)-Geoconcept(read/write)-GeoRSS(read/write)-VFK(readonly)-PGDUMP(read/write)-OSM(readonly)-GPSBabel(read/write)-OGR_PDS(readonly)-WFS(readonly)-OAPIF(readonly)-EDIGEO(readonly)-SVG(readonly)-Idrisi(readonly)-Elasticsearch(read/write)-Carto(read/write)-AmigoCloud(read/write)-SXF(readonly)-Selafin(read/write)-JML(read/write)-PLSCENES(readonly)-CSW(readonly)-VDV(read/write)-MVT(readonly)-NGW(read/write)-MapML(read/write)-TIGER(readonly)-AVCBin(readonly)-AVCE00(readonly)-HTTP(readonly)3.2 访问ESRI Shapefile文件使用ogr_fdw_info命令可以查看ESRI Shapefile文件的信息可以生成FDW脚本。#查看ESRI Shapefile文件信息[pg14~]$ ogr_fdw_info-s/opt/package/shp/gadm36_CAN_0.shp Format: ESRI Shapefile Layers: gadm36_CAN_0#生成ESRI Shapefile FDW脚本[pg14~]$ ogr_fdw_info-s/opt/package/shp/gadm36_CAN_0.shp-l gadm36_CAN_0CREATESERVER myserverFOREIGNDATAWRAPPER ogr_fdw OPTIONS(datasource/opt/package/shp/gadm36_CAN_0.shp,formatESRI Shapefile);CREATEFOREIGNTABLEgadm36_can_0(fidbigint,geomGeometry(Polygon,4326),gid_0varchar(80),name_0varchar(80))SERVER myserver OPTIONS(layergadm36_CAN_0);以上因选择数据不合理全屏都是16进制数据不再展示查询。3.3 访问WFS GIS服务借用天地图的WFS服务展示功能先创建SERVER再创建表。CREATESERVER geoserverFOREIGNDATAWRAPPER ogr_fdw OPTIONS(datasourceWFS:http://gisserver.tianditu.gov.cn/TDTService/wfs,formatWFS);CREATEFOREIGNTABLEtopp_states(OBJECTIDbigint,GBbigint,RNtext,NAMEtext,TYPEtext,Shape_Lengdoubleprecision,lineGeometry(MultiLineString,4326))SERVERgeoserverOPTIONS(layerTDTService:LRRL);3.4 访问GDB数据文件使用ogr_fdw_info命令可以查看GDB文件的信息可以生成FDW脚本。[pg14localhostpackage]$ ogr_fdw_info-s gdb.gdb Format: OpenFileGDB Layers: 湖泊注记 山脉 省界色带 地级市行政中心 县级行政中心 省级行政中心 河流 面状水域 境界线 县级界 山峰 水库注记 海岸线 省级行政区 市级行政区 县级行政区 岛屿注记 港湾注记 群列岛注记 河流注记 说明注记[pg14localhostpackage]$ ogr_fdw_info-s gdb.gdb-l 水库注记CREATESERVER my_gdb_serverFOREIGNDATAWRAPPER ogr_fdw OPTIONS(datasource/opt/package/gdb.gdb,formatOpenFileGDB);CREATEFOREIGNTABLEfdw_table_water(fidbigint,shapeGeometry(Point,9001),namevarchar(50),snamevarchar(20),djvarchar(20),typevarchar(20),pronamevarchar(50))SERVER my_gdb_server OPTIONS(layer水库注记);--查询表数据如下postgres# select fid,shape,name from fdw_table_water;fid|shape|name--------------------------------------------------------------------2|010100002029230000E0141DA9CCBF224104780BA411E54541|街面水库5|01010000202923000040A4DFFE057B1C41506B9A5789E74441|棉花滩水库6|01010000202923000048D8F0F4FC35244188855A6B60504641|水口水库7|0101000020292300002041F1E38BC32441F8C2647ADF9D4541|金钟水库8|01010000202923000020B9FCC7343B254118265335F08C4541|东圳水库9|010100002029230000D022DB19A4D3214124DBF95EEBF84441|上存水库10|010100002029230000A82C433CD65F2041545227B0D1534441|峰头水库11|010100002029230000509621AE7ECB234104121407274F4541|山美水库12|010100002029230000C0E3149D3807244138D6C5652F384541|惠女水库13|01010000202923000048BF7D9D3B0E26412C8716D124B04541|东张水库14|01010000202923000078711BADD18E26415C643BB72C464641|山仔水库15|01010000202923000040FAED6BCD2B2641647FD92566B14641|洪口水库16|01010000202923000078832F6C6E6426417CF2B0D8A9024741|芹山水库17|01010000202923000070A3017CE95B2241705F078E7B7D4741|东溪水库18|01010000202923000070D71212B29D22411C7C612AEA6A4641|沙溪口水库19|0101000020292300005027A0C9552723418C976EAA74114641|水东水库20|01010000202923000078A52C2393052041D812F2494C7F4541|白沙水库23|01010000202923000020FDF6B506C51F4124DBF90EBEE44441|南一水库以上测试了ogr_fdw访问常用GIS数据文件和服务的例子根据例子看使用相对简单但是由于GIS数据数据量相对较大使用时需要考虑数据传输和展示问题。4、最佳实践pgsql-ogr-fdw基于GDAL/OGR库实现使得pgsql-ogr-fdw能够访问多种地理空间数据格式包括但不限于ESRI Shapefile、GeoJSON、GML等这使得整合来自不同来源的数据变得简单。用户可以使用标准的SQL语句对远程数据执行查询极大地简化了数据分析和处理流程无需额外学习新的查询语言或工具。直接从原数据源读取数据避免了将大量数据导入到PostgreSQL的过程节省了时间和存储资源。对于大型数据集或者复杂的查询操作直接从外部数据源读取数据可能会导致性能问题。因为所有数据处理都发生在原始数据源上这可能限制了查询效率。pgsql-ogr-fdw依赖于OGR库的支持这意味着其功能和稳定性受制于OGR库的质量及其对特定数据格式的支持程度加上还需要PostGIS支持使其安装相对困难。尽管基本的设置过程较为直观但针对特定需求进行优化配置例如调整性能参数、解决兼容性问题可能需要一定的技术知识和经验。如果应用要求频繁地对数据进行更新或写入操作pgsql-ogr-fdw可能不是最佳选择因为它主要用于读取数据并且对写入的支持有限。pgsql-ogr-fdw是一个强大的工具特别适合用于分析和查询多种格式的地理空间数据而无需将其导入到PostgreSQL中。然而在考虑使用它时也需要权衡其潜在的性能挑战以及对外部库的依赖性。对于特定的应用场景特别是那些涉及大量实时数据更新的需求可能需要探索其他解决方案。5、卸载pgsql-ogr-fdw在卸载时需确定没有任何对象或功能还在引用pgsql-ogr-fdw提供的任何对象后执行“drop extension xxx;”就可以卸载pgsql-ogr-fdw, 并删除其创建的数据库对象。