Важно: Данный раздел актуален для Платформы данных On-Premise.
PostGIS - это расширение базы данных для PostgreSQL, позволяющее хранить в базе данных объекты ГИС (геоинформационных систем). Расширение RT.WareHouse PostGIS включает в себя поддержку пространственных индексов R-Tree на основе GiST, а также функции для анализа и обработки объектов ГИС.
Расширение RT.WareHouse PostGIS поддерживает дополнительный растровый (raster
) тип данных PostGIS и большинство функций PostGIS Raster. Благодаря объектам PostGIS Raster геометрический (geometry
) тип данных PostGIS предлагает единый набор оверлейных SQL-функций (таких как ST_Intersects
), беспрепятственно работающих с векторными и растровыми геопространственными данными. PostGIS Raster использует библиотеку-транслятор GDAL (Geospatial Data Abstraction Library) для форматов растровых геопространственных данных, которая представляет вызывающему приложению единую модель абстракции растровых данных.
Пакет расширения RT.WareHouse PostGIS можно загрузить из хранилища пакетов RT.Warehouse. После загрузки пакета можно следовать инструкциям, приведенным в разделе Проверка загрузки программного обеспечения базы данных RT.WareHouse, чтобы убедиться в целостности загрузки. Установить пакет можно с помощью менеджера пакетов yum.
База данных RT.WareHouse поддерживает расширение PostGIS с следующими версиями компонентов:
Расширение RT.Warehouse PostGIS не поддерживает следующие возможности:
Расширение RT.WareHouse PostGIS содержит скрипт postgis_manager.sh
, который устанавливает или удаляет функции PostGIS и PostGIS Raster в базе данных. После установки расширения PostGIS скрипт находится в папке $GPHOME/share/postgresql/contrib/postgis-2.1/
. postgis_manager.sh
запускает SQL-скрипты, которые устанавливают или удаляют PostGIS и PostGIS Raster из базы данных.
Запустите скрипт postgis_manager.sh
с указанием базы данных и с опцией install
для установки PostGIS и PostGIS Raster. В данном примере объекты PostGIS и PostGIS Raster устанавливаются в базу данных mydatabase
.
postgis_manager.sh mydatabase install
Скрипт запускает все SQL-скрипты PostGIS, которые обеспечивают работу PostGIS в базе данных:
install/postgis.sql
, install/rtpostgis.sql
install/spatial_ref_sys.sql
, install/postgis_comments.sql
, install/raster_comments.sql
.
При установке пакета postGIS в файл greenplum_path.sh добавляются следующие строки для поддержки PostGIS Raster:
export GDAL_DATA=$GPHOME/share/gdal
export POSTGIS_ENABLE_OUTDB_RASTERS=0
export POSTGIS_GDAL_ENABLED_DRIVERS=DISABLE_ALL
PostGIS использует растровые драйверы GDAL при обработке растровых данных с помощью таких команд, как ST_AsJPEG()
. По умолчанию PostGIS деактивирует все растровые драйверы. Вы включаете растровые драйверы, устанавливая значение переменной среды POSTGIS_GDAL_ENABLED_DRIVERS
в файле greenplum_path.sh
на всех хостах базы данных RT.WareHouse.
Чтобы просмотреть список поддерживаемых растровых драйверов GDAL для системы базы данных RT.WareHouse, запустите утилиту raster2pgsql
с опцией -G
на мастере базы данных RT.WareHouse.
raster2pgsql -G
Примечание. Команда выводит длинное имя драйвера. В таблице GDAL Raster по адресу https://gdal.org/drivers/raster/index.html перечислены имена длинных форматов и соответствующие коды, которые вы указываете в качестве значения переменной среды. Например, код длинного имени Portable Network Graphics — PNG. В этом примере строки экспорта включены четыре растровых драйвера GDAL.
|
Команда gpstop -r
перезапускает систему базы данных RT.WareHouse, чтобы использовать обновленные настройки в файле greenplum_path.sh
.
После того как вы обновили файл greenplum_path.sh
на всех хостах и перезапустили систему базы данных RT.WareHouse, вы можете отобразить включенные растровые драйверы с помощью функции ST_GDALDrivers()
. Эта команда SELECT
выводит список включенных растровых драйверов.
SELECT short_name, long_name FROM ST_GDALDrivers();
Запустите скрипт postgis_manager.sh
с указанием базы данных и с опцией uninstall
для удаления PostGIS и PostGIS Raster. В данном примере удаляется поддержка PostGIS и PostGIS Raster из базы данных mydatabase
.
postgis_manager.sh mydatabase uninstall
Скрипт запускает оба SQL-скрипта PostGIS, которые удаляют PostGIS и PostGIS Raster из базы данных: uninstall_rtpostgis.sql
и uninstall_postgis.sql
.
Скрипт postgis_manager.sh
не удаляет эти переменные окружения PostGIS Raster из файла greenplum_path.sh
: GDAL_DATA
, POSTGIS_ENABLE_OUTDB_RASTERS
, POSTGIS_GDAL_ENABLED_DRIVERS
. Переменные окружения удаляются при деинсталляции пакета расширения PostGIS с помощью утилиты gppkg
.
Следующие примеры операторов 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 обеспечивает поддержку пространственной индексации (spatial indexing) GiST. Схема GiST предлагает индексацию даже крупных объектов. Он использует систему индексирования с потерями, в которой меньшие объекты действуют как прокси для более крупных объектов в индексе. В системе индексирования PostGIS все объекты используют свои ограничивающие рамки в качестве прокси в индексе.
Вы можете построить индекс GiST следующим образом:
CREATE INDEX indexname
ON tablename
USING GIST ( geometryfield );
В этом разделе описывается поддержка и ограничения функций расширения RT.WareHouse PostGIS.
Расширение RT.WareHouse PostGIS поддерживает следующие типы данных PostGIS:
RT.WareHouse PostGIS поддерживает следующие типы данных PostGIS Raster:
Информацию об управлении растровыми данными PostGIS, запросах и приложениях см. на странице https://postgis.net/docs/manual-2.5/using_raster_dataman.html.
Расширение RT.WareHouse PostGIS поддерживает индекс GiST (Generalized Search Tree, обобщенное дерево поиска).
В этом разделе перечислены ограничения расширения RT.WareHouse PostGIS для пользовательских функций (UDF), типов данных и агрегатов.
ANALYZE
для пользовательских типов данных, не поддерживаются. Например, не поддерживается функция ST_Estimated_Extent. Функция требует статистики столбцов таблицы для определяемых пользователем типов данных, которая недоступна в RT.WareHouse.В базе данных RT.WareHouse с несколькими сегментами агрегат может возвращать разные ответы, если он вызывается несколько раз подряд.
PostGIS использует триггеры и таблицу PostGIS public.authorization_table
для поддержки длительных транзакций. Когда PostGIS пытается получить блокировки для длинных транзакций, база данных RT.WareHouse сообщает об ошибках, указывая на то, что функция не может получить доступ к отношению authorization_table
.
Обходной путь — использовать функцию AddGeometryColumn
для геометрии PostGIS. Например, таблицу с геометрией PostGIS невозможно создать с помощью следующей команды SQL:
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);
После установки пакета расширения PostGIS необходимо включить поддержку PostGIS для каждой базы данных, требующей ее использования. Для включения или удаления поддержки PostGIS в базе данных можно выполнить SQL-скрипты, поставляемые вместе с пакетом PostGIS в GPHOME/share/postgresql/contrib/postgis2.1/
.
Вместо того чтобы запускать скрипты по отдельности, можно использовать скрипт postgis_manager.sh
для запуска SQL-скриптов, включающих или удаляющих поддержку PostGIS.
SQL-скрипт PostGIS можно запускать по отдельности для включения или удаления поддержки PostGIS. Например, эти команды запускают SQL-скрипты postgis.sql
, rtpostgis.sql
и patial_ref_sys.sql
в базе данных mydatabase
.
psql -d mydatabase -f
$GPHOME/share/postgresql/contrib/postgis-2.1/install/postgis.sql
psql -d mydatabase -f
$GPHOME/share/postgresql/contrib/postgis-2.1/install/rtpostgis.sql
psql -d mydatabase -f
$GPHOME/share/postgresql/contrib/postgis-2.1/install/spatial_ref_sys.sql
После запуска скриптов база данных включается как для PostGIS, так и для PostGIS Raster.
Эти скрипты позволяют включить PostGIS и дополнительный PostGIS Raster в базе данных:
install/postgis.sql
- загрузка объектов и определений функций PostGIS.install/rtpostgis.sql
- загрузка растровых объектов PostGIS и определений функций.
Примечание. Если вы устанавливаете PostGIS Raster, то объекты PostGIS должны быть установлены до PostGIS Raster. PostGIS Raster зависит от объектов PostGIS. RT.Warehouse возвращает ошибку, если |
Эти скрипты SQL добавляют данные и комментарии в базу данных с поддержкой PostGIS:
install/spatial_ref_sys.sql
- заполнение таблицы spatial_ref_sys
полным набором идентификаторов определений систем координат EPSG. С помощью идентификаторов определений можно выполнять операции ST_Transform()
над геометриями.
Примечание. Если вы переопределили стандартные записи и хотите использовать эти переопределения, не загружайте файл |
install/postgis_comments.sql
- добавление комментариев к функциям PostGIS.install/raster_comments.sql
- добавление комментариев к функциям PostGIS Raster.Вы можете просмотреть комментарии с помощью метакоманды pslq
\dd function_name
или с помощью любого инструмента, который может отображать комментарии к функциям базы данных RT.Warehouse.
При установке пакета postGIS в файл greenplum_path.sh
добавляются эти строки для поддержки PostGIS Raster:
export GDAL_DATA=$GPHOME/share/gdal
export POSTGIS_ENABLE_OUTDB_RASTERS=0
export POSTGIS_GDAL_ENABLED_DRIVERS=DISABLE_ALL
GDAL_DATA
задает расположение утилит и файлов поддержки GDAL, используемых библиотекой GDAL. Например, каталог содержит файлы поддержки EPSG, такие как gcs.csv
и pcs.csv
(так называемые словари, в основном в формате CSV). Библиотеке GDAL эти файлы поддержки необходимы для корректной оценки кодов EPSG.
POSTGIS_GDAL_ENABLED_DRIVERS
- устанавливает включенные драйверы GDAL в среде PostGIS.
POSTGIS_ENABLE_OUTDB_RASTERS
- булевский параметр конфигурации, позволяющий получить доступ к растровым каналам вне базы данных.
Чтобы удалить поддержку PostGIS из базы данных, запустите SQL-скрипты, поставляемые вместе с пакетом расширения PostGIS в каталоге $GPHOME/share/postgresql/contrib/postgis-2.1/
Примечание. Если вы установили PostGIS Raster, то перед удалением объектов PostGIS необходимо удалить PostGIS Raster. PostGIS Raster зависит от объектов PostGIS. RT.Warehouse возвращает ошибку, если объекты PostGIS удалены до PostGIS Raster. |
Эти скрипты удаляют объекты PostGIS и PostGIS Raster из базы данных:
uninstall/uninstall_rtpostgis.sql
- удаляет объекты и определения функций PostGIS Raster.uninstall/uninstall_postgis.sql
- удаляет объекты и определения функций PostGIS.После удаления поддержки PostGIS из всех баз данных в системе RT.Warehouse можно удалить пакет расширения PostGIS. Например, эта команда gppkg
удаляет пакет расширения PostGIS
gppkg -r postgis-2.1.5+pivotal.2
После удаления пакета перезапустите RT.Warehouse.
gpstop -r
Убедитесь, что эти строки для поддержки PostGIS Raster удалены из файла greenplum_path.sh
.
export GDAL_DATA=$GPHOME/share/gdal
export POSTGIS_ENABLE_OUTDB_RASTERS=0
export POSTGIS_GDAL_ENABLED_DRIVERS=DISABLE_ALL