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, при большом количестве строк может произойти нехватка памяти из-за значительного времени выполнения. Кроме того, сWKB3D геометрии и некоторые другие геометрии, такие как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.