Greenplum数据库中使用PostGIS扩展
本文包含以下内容:关于 PostGISGreenplum 数据库中的PostGIS 扩展提供PostGIS能力升级Greenplum的PostGIS扩展迁移PostGIS 1.4到2.0使用PostGIS 功能和限制1. 关于 PostGIS关于PostGIS的介绍,本文不再赘述,请参考本公众号相关专题文章。2. Greenplum 数据库中的PostGIS 扩展可从Pivotal Network
本文包含以下内容:
- 关于 PostGIS
- Greenplum 数据库中的PostGIS 扩展
- 提供PostGIS能力
- 升级Greenplum的PostGIS扩展
- 迁移PostGIS 1.4到2.0
- 使用
- PostGIS 功能和限制
1. 关于 PostGIS
关于PostGIS的介绍,本文不再赘述,请参考本公众号相关专题文章。
2. Greenplum 数据库中的PostGIS 扩展
可从Pivotal Network网站(https://network.pivotal.io )获得Greenplum数据库PostGIS扩展。可以使用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)。
重要说明:由于引入了
Pivotal Query Optimizer
,用于Greenplum Database 4.3.4.x
和更早版本的扩展程序包与Greenplum Database 4.3.5.0
和更高版本不兼容。
另外,用于Greenplum
数据库4.3.5.0
和更高版本的扩展程序包与Greenplum
数据库4.3.4.x
和更早版本不兼容。
要将扩展包与Greenplum Database 4.3.5.0
及更高版本一起使用,必须安装和使用为Greenplum Database 4.3.5.0
及更高版本构建的Greenplum Database
扩展包(gppkg文件和contrib模块)。 对于与Greenplum Database 4.3.4.x
及更早版本一起使用的自定义模块,必须重建与Greenplum Database 4.3.5.0
及更高版本一起使用的模块。
从1.4.2开始的2.0.3的主要增强和更改包括:
- Support for geographic coordinates (latitude and longitude) with a GEOGRAPHY type and related functions.
- Input format support for these formats: GML, KML, and JSON
- Unknown SRID changed from -1 to 0
- 3D relationship and measurement support functions
- Making spatial indexes 3D aware
- KNN GiST centroid distance operator
- Many deprecated functions are removed
- Performance improvements
警告:PostGIS 2.0删除了许多已过时但在PostGIS 1.4中可用的功能。 使用PostGIS 1.4中已弃用的函数编写的函数和应用程序可能需要重写。 有关新功能,增强功能或已更改功能的列表,请参见PostGIS文档:
http://postgis.net/docs/manual-2.0/PostGIS_Special_Functions_Index.html#NewFunctions
Greenplum数据库不支持的PostGIS特性:
- 拓扑
- 栅格
- 少数用户定义的函数和集合
- PostGIS长事物支持
- 几何和地理类型修改
3. 提供PostGIS能力
安装PostGIS扩展软件包后,可以为每个需要使用PostGIS的数据库启用PostGIS支持。 要启用支持,请在目标数据库中运行PostGIS软件包随附的启动器SQL脚本。
对于PosgGIS 1.4,启用程序脚本为postgis.sql
psql -f postgis.sql -d your_database
您的数据库现在已启用空间能力。
对于PostGIS 2.0.3
,可以在目标数据库中运行两个SQL脚本postgis.sql
和spatial_ref_sys.sql
。
例如:
psql -d mydatabase -f
$GPHOME/share/postgresql/contrib/postgis-2.0/postgis.sql
psql -d mydatabase -f
$GPHOME/share/postgresql/contrib/postgis-2.0/spatial_ref_sys.sql
4. 升级Greenplum的PostGIS扩展
如果从PostGIS扩展软件包2.0版(pv2.0)或更高版本升级,则必须在目标数据库中运行postgis_upgrade_20_minor.sql
。 本示例升级PostGIS扩展软件包并运行脚本:
gppkg -u postgis-ossv2.0.3_pv2.0.1_gpdb4.3-rhel5-x86_64.gppkg
psql -d mydatabase -f $GPHOME/share/postgresql/contrib/postgis-2.0/postgis_upgrade_20_minor.sql
5. 迁移PostGIS 1.4到2.0
要将启用PostGIS的数据库从1.4迁移到2.0,必须执行PostGIS HARD UPGRADE。 硬升级包括转储已启用PostGIS 1.4的数据库并将该数据库的数据加载到已启用PostGIS 2.0的新数据库。
有关PostGIS 手动过程的信息,请参见PostGIS文档:http://postgis.net/docs/manual-2.0/postgis_installation.html#hard_upgrade
6. 使用
以下示例SQL语句创建非OpenGIS表和几何。
CREATE TABLE geom_test ( gid int4, geom geometry,
name varchar(25) );
INSERT INTO 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');
INSERT INTO geom_test ( gid, geom, name )
VALUES ( 2, 'LINESTRING(1 1 1,5 5 5,7 7 5)', '3D Line' );
INSERT INTO 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(2 2 0, 3 3 0)'));
下面的示例SQL语句创建一个表,并向表中添加一个几何列,该列的SRID整数值引用了SPATIAL_REF_SYS
表中的一个条目。 INSERT
语句将添加到表的地理位置。
CREATE TABLE geotest (id INT4, name VARCHAR(32) );
SELECT AddGeometryColumn('geotest','geopoint', 4326,'POINT',2);
INSERT INTO geotest (id, name, geopoint)
VALUES (1, 'Olympia', ST_GeometryFromText('POINT(-122.90 46.97)', 4326));
INSERT INTO geotest (id, name, geopoint)|
VALUES (2, 'Renton', ST_GeometryFromText('POINT(-122.22 47.50)', 4326));
SELECT name,ST_AsText(geopoint) FROM geotest;
空间索引
PostgreSQL支持GiST空间索引。
GiST方案甚至可以在大型对象上提供索引。
它使用有损索引编制系统,其中较小的对象充当索引中较大对象的代理。
在PostGIS索引系统中,所有对象都将其边界框用作索引中的代理。
建立空间索引
可以按以下方式构建GiST索引:
CREATE INDEX indexname
ON tablename
USING GIST ( geometryfield );
7. PostGIS 功能和限制
Greenplum数据库PostGIS扩展不支持以下功能:
- 拓扑结构
- 栅格
支持的数据类型:
box2d
box3d
geometry
geography
spheroid
支持的索引
Greenplum数据库PostGIS扩展支持GiST(通用搜索树)索引。
PostGIS扩展限制
本节列出了Greenplum数据库PostGIS扩展限制,包括用户定义函数(UDF),数据类型和集合。
Greenplum数据库不支持与PostGIS拓扑或栅格功能相关的数据类型和功能,例如TopoGeometry和ST_AsRaster
。
不支持ST_Estimated_Extent函数。该功能需要表列统计信息来显示Greenplum数据库无法提供的用户定义数据类型。
不支持ST_GeomFromGeoJSON
函数。该功能需要JSON支持。 Greenplum数据库不支持JSON。
Greenplum数据库不支持以下PostGIS聚合:
ST_MemCollect
ST_MakeLine
在具有多个细分的Greenplum数据库上,如果重复调用多次,则聚合可能会返回不同的答案。
Greenplum数据库不支持PostGIS长事务。
PostGIS依赖触发器和PostGIS表public.authorization_table
来提供长期事务支持。当PostGIS尝试获取长交易的锁时,Greenplum数据库会报告错误,指出该函数无法访问关系authorization_table
。
Greenplum数据库不支持用户定义类型的类型修饰符。
解决方法是将AddGeometryColumn
函数用于PostGIS几何对象。例如,无法使用以下SQL命令创建具有PostGIS几何形状的表
CREATE TABLE geometries(id INTEGER, geom geometry(LINESTRING));
使用AddGeometryColumn
函数将PostGIS几何添加到表中。 例如,以下这些SQL语句创建一个表并将PostGIS几何添加到表中:
CREATE TABLE geometries(id INTEGER);
SELECT AddGeometryColumn('public', 'geometries', 'geom', 0, 'LINESTRING', 2);
更多推荐
所有评论(0)