Chapter 13 GreenplumPostGIS Extension
This chaptercontains the following information:
• About PostGIS
• Greenplum PostGIS Extension
• Enabling PostGIS Support
• Upgrading the Greenplum PostGIS Extension
• Migrating from PostGIS 1.4 to 2.0
• Usage
• PostGIS Extension Support and Limitations
About PostGIS
PostGIS是PostgreSQL的空间数据库扩展,允许GIS(地理信息系统)对象存储在数据库中。 Greenplum数据库PostGIS扩展包括对基于GiST的R-Tree空间索引和用于分析和处理GIS对象的功能的支持。
有关PostGIS的更多信息,请访问http://postgis.refractions.net/。
有关Greenplum数据库PostGIS扩展支持的信息,请参阅PostGIS扩展支持和限制。
Greenplum PostGIS Extension
Greenplum数据库PostGIS扩展可从PivotalNetwork获得。 您可以使用Greenplum软件包管理器(gppkg)进行安装。 有关详细信息,请参阅Greenplum数据库实用程序指南中的gppkg。
•Greenplum数据库4.3支持PostGIS扩展包2.0版(PostGIS 2.0.3)。
•Greenplum数据库4.2.6和更高版本支持PostGIS扩展包版本1.0和2.0(PostGIS 1.4和2.0.3)
在安装Greenplum数据库时,只能安装一个版本的PostGIS扩展包(1.0或2.0)。
•4.2.6之前的Greenplum数据库支持PostGIS扩展包版本1.0(PostGIS 1.4)。
Table 141: PostGIS Component Version
PostGIS Extension Package |
PostGIS |
Geos |
Proj |
2.0 |
2.0.3 |
3.3.8 |
4.8.0 |
1.0 |
1.4.2 |
3.2.2 |
4.7.0 |
|
有关支持的扩展包和软件版本的信息,请参阅Greenplum数据库发行说明。
重要:由于引入了Pivotal QueryOptimizer,GreenplumDatabase 4.3.4.x及更早版本的扩展包与GreenplumDatabase 4.3.5.0及更高版本不兼容。此外,GreenplumDatabase 4.3.5.0及更高版本的扩展包与GreenplumDatabase 4.3.4.x及更早版本不兼容。
要在GreenplumDatabase 4.3.5.0及更高版本中使用扩展包,必须安装并使用为GreenplumDatabase 4.3.5.0及更高版本构建的GreenplumDatabase扩展包(gppkg文件和contrib模块)。对于GreenplumDatabase 4.3.4.x及更早版本中使用的自定义模块,您必须重新构建与GreenplumDatabase 4.3.5.0及更高版本配合使用的模块。
1.4.3中2.0.3的主要增强和变化包括:
•支持具有GEOGRAPHY类型和相关功能的地理坐标(经度和纬度)。
•这些格式的输入格式支持:GML,KML和JSON
•未知SRID从-1更改为0
•3D关系和测量支持功能
•使空间索引3D感知
•KNN GiST质心距离运算符
•许多弃用的功能被删除
•性能改进
请参阅PostGIS文档以获取更改列表:http://postgis.net/docs/manual-2.0/release_notes.html
警告:PostGIS 2.0删除了许多弃用的功能,但在PostGIS 1.4中可用。
使用PostGIS 1.4中不推荐使用的函数编写的函数和应用程序可能需要
改写。 请参阅PostGIS文档以获取新功能,增强功能或更改功能的列表:
http://postgis.net/docs/manual-2.0/PostGIS_Special_Functions_Index.html#NewFunctions
Greenplum Database PostGIS Limitations
Greenplum数据库PostGIS扩展不支持以下功能:
• Topology
• Raster
• A small numberof user defined functions and aggregates
• PostGIS longtransaction support
• Geometry andgeography type modifier
有关Greenplum数据库PostGIS支持的信息,请参阅PostGIS扩展支持和限制。
Enabling PostGIS Support
安装PostGIS扩展包后,为每个需要使用的数据库启用PostGIS支持。 要启用支持,请在目标数据库中运行随PostGIS包一起提供的启用SQL脚本。
对于PosgGIS 1.4,启用脚本是postgis.sql
psql -fpostgis.sql -d your_database
您的数据库现在在空间上启用。
对于PostGIS 2.0.3,在目标数据库中运行两个SQL脚本postgis.sql和spatiai_ref_sys.sql。
例如:
psql -dmydatabase -f $GPHOME/share/postgresql/contrib/postgis-2.0/postgis.sql
psql -dmydatabase -f $GPHOME/share/postgresql/contrib/postgis-2.0/spatial_ref_sys.sql
注意:spatial_ref_sys.sql使用EPSG坐标系定义标识符填充spatial_ref_sys表。 如果您已经覆盖了标准条目,并且希望使用这些覆盖,则在创建新数据库时不要加载spatial_ref_sys.sql文件。
您的数据库现在在空间上启用。
Upgrading the Greenplum PostGISExtension
If you upgrade from PostGIS extensionpackage version 2.0 (pv2.0) or later, you must run postgis_upgrade_2o_minor.sqi in your target database. This exampleupgrades the PostGIS extension package and runs The script:
gppkg -upostgis-ossv2.0.3_pv2.0.1_gpdb4.3-rhel5-x86_64.gppkg
psql -dmydatabase -f $GPHOME/share/postgresql/contrib/postgis-2.0/ postgis_upgrade_20_minor.sql
Migrating from PostGIS 1.4 to 2.0
要将PostGIS启用的数据库从1.4迁移到2.0,您必须执行PostGIS HARD升级。
HARD UPGRADE包括转储使用PostGIS 1.4启用的数据库并加载
将数据库数据化为使用PostGIS 2.0启用的新数据库。
有关PostGIS HARD升级过程的信息,请参阅PostGIS文档:http://postgis.net/docs/manual-2.0/postgis_installation.html#hard_upgrade
Usage
以下示例SQL语句创建非OpenGIS表和几何。
CREATETABLE geom_test ( gid int4, geom geometry,
namevarchar(25) );
INSERTINTO geom_test ( gid, geom, name )
VALUES( 1, 'POLYGON((0 0 0,0 5 0,5 5 0,5 0 0,0 0 0))', '3D Square');
INSERTINTO geom_test ( gid, geom, name )
VALUES( 2, 'LINESTRING(1 1 1,5 5 5,7 7 5)', '3D Line' );
INSERTINTO geom_test ( gid, geom, name )
VALUES( 3, 'MULTIPOINT(3 4,8 9)', '2D Aggregate Point' );
SELECT* from geom_test WHERE geom &&
Box3D(ST_GeomFromEWKT('LINESTRING(22 0, 3 3 0)'));
以下示例SQL语句将创建一个表,并使用引用SPATIAL_REF_SYS表中的条目的SRID整数值向表中添加几何列。 INSERT语句添加到表中的地点。
CREATETABLE geotest (id INT4, name VARCHAR(32) );
SELECTAddGeometryColumn('geotest','geopoint', 4326,'POINT',2);
INSERT INTOgeotest (id, name, geopoint)
VALUES (1,'Olympia', ST_GeometryFromText('POINT(-122.90 46.97)', 4326));
INSERT INTOgeotest (id, name, geopoint)|
VALUES (2,'Renton', ST_GeometryFromText('POINT(-122.22 47.50)', 4326));
SELECTname,ST_AsText(geopoint) FROM geotest;
Spatial Indexes
PostgreSQL提供对GiST空间索引的支持。 即使在大型物体上,GiST方案也提供索引。 它使用有损索引系统,其中较小的对象充当索引中较大对象的代理。 在PostGIS索引系统中,所有对象都使用边界框作为索引中的代理。
Building aSpatial Index
You can build a GiST index as follows:
CREATE INDEX indexnameON tablename
USING GIST ( geometryfield );
PostGIS Extension Support andLimitations
This sectiondescribes Greenplum PostGIS extension feature support and limitations.
• Supported PostGIS Data Types
• Supported PostGIS Index
• PostGIS Extension Limitations
The GreenplumDatabase PostGIS extension does not support the following features:
• Topology
• Raster
Supported PostGIS Data Types
GreenplumDatabase PostGIS extension supports these PostGIS data types:
• box2d
• box3d
• geometry
• geography
• spheroid
Supported PostGIS Index
GreenplumDatabase PostGIS extension supports the GiST (Generalized Search Tree) index.
PostGIS Extension Limitations
本节列出用户定义函数(UDF),数据类型和聚合的Greenplum数据库PostGIS扩展限制。
•Greenplum数据库不支持与PostGIS拓扑或栅格功能相关的数据类型和函数,如TopoGeometry和ST_AsRaster。
•ST_Estimated_Extent函数不受支持。该功能需要用户定义的数据类型的表格列统计数据,而Greenplum数据库不提供这些数据类型。
•不支持ST_GeomFronGeoJSoN功能。该功能需要JSON支持。 Greenplum数据库不支持JSON。
•这些PostGIS聚合不受Greenplum数据库支持:
•ST MemCollect
•ST_MakeLine
在具有多个段的Greenplum数据库中,如果聚合可能被重复调用多次,则聚合可能会返回不同的答案。
•Greenplum数据库不支持PostGIS长事务。
PostGIS依靠触发器和PostGIS表public.authorization_table来支持长事务。当PostGIS尝试获取长事务的锁定时,Greenplum数据库会报告错误,指出该函数无法访问关系authorization_table。
•Greenplum数据库不支持用户定义类型的类型修饰符。
解决的办法是为PostGIS几何体使用AddGeometrycoiumn函数。例如,具有PostGIS几何的表格不能使用以下SQL命令创建:
CREATE TABLE geometry(id INTEGER,geomgeometry(LINESTRING));
使用AddGeometrycoiumn函数将PostGIS几何添加到表中。例如,以下SQL语句将创建一个表并将PostGIS几何添加到表中:
CREATE TABLE geometry(id INTEGER);
SELECTAddGeometryColumn('public','geometries','geom',0,'LINESTRING',2);