ora2pgpro поддерживает полный экспорт пространственных объектов из БД Oracle. Для управления этим типом экспорта предусмотрены следующие директивы.
AUTODETECT_SPATIAL_TYPE
По умолчанию ora2pgpro анализирует индексы, чтобы определить тип пространственного ограничения и размерность, определённую в Oracle. Эти ограничения передаются при создании индекса, например, так:
CREATE INDEX ... INDEXTYPE IS MDSYS.SPATIAL_INDEX PARAMETERS('sdo_indx_dims=2, layer_gtype=point');
Если параметры ограничений в Oracle не указаны, по умолчанию эти столбцы экспортируются с универсальным типом GEOMETRY, чтобы получать любой тип пространственных данных.
Директива
AUTODETECT_SPATIAL_TYPE
заставляет ora2pgpro автоматически определять фактический тип пространственных данных и размерность, используемые в столбце с пространственными данными, в противном случае используется тип геометрии без ограничений. Когда эта функциональность включена (по умолчанию), ora2pgpro сканирует выборку из 50000 строк, чтобы проанализировать используемый тип GTYPE. Размер выборки можно увеличить или уменьшить, указав вAUTODETECT_SPATIAL_TYPE
необходимое количество строк для сканирования.Например, если директива
AUTODETECT_SPATIAL_TYPE
отключена, столбецshape
с типом Oracle SDO_GEOMETRY будет преобразован следующим образом:shape geometry(GEOMETRY) or shape geometry(GEOMETRYZ, 4326)
Если директива включена и столбец содержит отдельный тип геометрии, использующий одно измерение с двумерными или трёхмерными многоугольниками:
shape geometry(POLYGON, 4326) or shape geometry(POLYGONZ, 4326)
CONVERT_SRID
Эта директива позволяет управлять автоматическим преобразованием SRID Oracle в значения, соответствующие стандарту EPSG. Когда директива включена, ora2pgpro использует функцию Oracle
sdo_cs.map_oracle_srid_to_epsg()
для преобразования всех SRID. По умолчанию включена.Если Oracle возвращает NULL для
SDO_SRID
, NULL заменяется значением по умолчанию 8307, преобразованным в значение по EPSG: 4326 (см.DEFAULT_SRID
).Если задать значение больше 1, все SRID получат это значение, то есть
DEFAULT_SRID
не используется, если Oracle возвращает NULL.Обратите внимание, что значение
EPSG
можно задать на стороне Oracle, еслиsdo_cs.map_oracle_srid_to_epsg()
возращает NULL:system@db> UPDATE sdo_coord_ref_sys SET legacy_code=41014 WHERE srid = 27572;
DEFAULT_SRID
Используйте эту директиву, чтобы переопределить значение EPSG для SRID по умолчанию (4326).
CONVERT_SRID
переопределяет это значение, см. выше.GEOMETRY_EXTRACT_TYPE
Эта директива может принимать следующие значения:
WKT
(по умолчанию),WKB
илиINTERNAL
. Если задано значениеWKT
, ora2pgpro используетSDO_UTIL.TO_WKTGEOMETRY()
, чтобы извлечь геометрические данные. Когда задано значениеWKB
, ora2pgpro выводит их в двоичном формате с использованиемSDO_UTIL.TO_WKBGEOMETRY()
. Если извлекать данные вышеописанными способами в виде вызовов на стороне Oracle, при большом количестве строк может произойти нехватка памяти из-за значительного времени выполнения. Кроме того, сWKB
3D геометрии и некоторые другие геометрии, такие какCURVEPOLYGON
, не извлекаются. В таких случаях можно использовать тип извлеченияINTERNAL
. При этом для преобразования данныхSDO_GEOMETRY
вWKT
используется библиотека Pure Perl, а само преобразование осуществляется на стороне ora2pgpro. Эта функциональность требует доработки, поэтому перед использованием необходимо проверять корректность экспортированных геометрий. Для пространственных объектов по умолчанию используется тип извлеченияINTERNAL
.POSTGIS_SCHEMA
Используйте эту директиву, чтобы добавить определённую схему в путь поиска для функций PostGIS.
ST_SRID_FUNCTION
Задаёт функцию Oracle для извлечения SRID из метаданных
ST_Geometry
. По умолчанию:ST_SRID
. Для ArcSDE, например, следует указатьsde.st_srid
.ST_DIMENSION_FUNCTION
Задаёт функцию Oracle для извлечения размерности из метаданных
ST_Geometry
. По умолчанию:ST_DIMENSION
. Для ArcSDE, например, следует указатьsde.st_dimension
.ST_GEOMETRYTYPE_FUNCTION
Задаёт функцию Oracle для извлечения типа геометрии из столбца
ST_Geometry
. По умолчанию:ST_GEOMETRYTYPE
. Для ArcSDE, например, следует указатьsde.st_geometrytype
.ST_ASBINARY_FUNCTION
Задаёт функцию Oracle для преобразования значения
ST_Geometry
в форматWKB
. По умолчанию:ST_ASBINARY
. Для ArcSDE, например, следует указатьsde.st_asbinary
.ST_ASTEXT_FUNCTION
Задаёт функцию Oracle для преобразования значения
ST_Geometry
в форматWKT
. По умолчанию:ST_ASTEXT
. Для ArcSDE, например, следует указатьsde.st_astext
.