По умолчанию результаты преобразования в формат Postgres Pro выводятся в файл output.sql.
psql mydb < output.sql
Эта команда импортирует содержимое файла output.sql в БД Postgres Pro mydb.
DATA_LIMITПри экспорте типа
INSERT/COPYora2pgpro ведёт обработку блоками поDATA_LIMITкортежей для увеличения скорости. Перед записью на диск кортежи хранятся в памяти, так что если необходимо увеличить скорость, то при наличии достаточных системных ресурсов можно увеличить этот предел, например, до 100000 или 1000000. Значение 0 означает, что используется размер блока по умолчанию: 10000.BLOB_LIMITКогда ora2pgpro обнаруживает таблицу с BLOB, значение
DATA_LIMITавтоматически уменьшается путём деления на 10 до тех пор, пока оно не станет меньше 1000. Можно отдельно указать директивуBLOB_LIMITдля экспорта BLOB, но обратите внимание, что экспорт BLOB задействует много ресурсов, поэтому большое значение может вызвать нехватку памяти.OUTPUTЭта директива позволяет изменить выходной файл для ora2pgpro. Значение по умолчанию —
output.sql. Если задать имя файла с расширением.gzили.bz2, вывод будет сжат автоматически. При этом для файлов.gzтребуется установленный модуль PerlCompress::Zlib, а для.bz2— утилита командной строки bzip2.OUTPUT_DIRВ этой директиве можно задать каталог для записи файла. Указанный каталог должен существовать.
BZIP2В этой директиве можно указать полный путь к утилите bzip2, если она не обнаружена в переменной окружения
PATH.FILE_PER_CONSTRAINTПозволяет сохранять ограничения для объектов в отдельном файле во время экспорта схемы. Файл будет назван
CONSTRAINTS_OUTPUT, гдеOUTPUT— это значение соответствующей директивы. Для сжатия можно использовать расширение.gzили.bz2. По умолчанию все данные сохраняются в файле, указанном вOUTPUT. Эта директива используется только с типом экспортаTABLE.Ограничения можно быстро импортировать в Postgres Pro с типом экспорта
LOAD, чтобы создавать их параллельно, используя несколько соединений (-jилиJOBS).FILE_PER_INDEXПозволяет сохранять индексы в отдельном файле во время экспорта схемы. Файл будет назван
INDEXES_OUTPUT, гдеOUTPUT— это значение соответствующей директивы. Для сжатия можно использовать расширение.gzили.bz2. По умолчанию все данные сохраняются в файле, указанном вOUTPUT. Эта директива используется только с типами экспортаTABLEиTABLESPACE. С типом экспортаTABLESPACEкоманды ALTER INDEX ... TABLESPACE ... записываются в отдельный файлTBSP_INDEXES_OUTPUT, который можно загрузить в конце миграции после создания индексов для их перемещения.Индексы можно быстро импортировать в Postgres Pro с типом экспорта
LOAD, чтобы создавать их параллельно, используя несколько соединений (-jилиJOBS).FILE_PER_FKEYSПозволяет сохранять объявления внешних ключей в отдельном файле во время экспорта схемы. По умолчанию внешние ключи экспортируются в основной выходной файл или
CONSTRAINT_output.sql. Если директива задана, внешние ключи экспортируются в файлFKEYS_output.sql.FILE_PER_TABLEПозволяет сохранять результаты экспорта в отдельных файлах для каждой таблицы или представления. Файлы будут названы
tablename_OUTPUT, гдеOUTPUT— это значение соответствующей директивы. Для сжатия можно использовать расширение.gzили.bz2в директивеOUTPUT. С заданным значением 0 (по умолчанию) все данные сохраняются в одном файле, значение 1 включает эту функциональность. Используется только с типами экспортаINSERTилиCOPY.FILE_PER_FUNCTIONПозволяет сохранять функции, процедуры и триггеры в отдельных файлах для каждого объекта. Файлы будут названы
objectname_OUTPUT, гдеOUTPUT— это значение соответствующей директивы. Для сжатия можно использовать расширение.gzили.bz2в директивеOUTPUT. С заданным значением 0 (по умолчанию) все данные сохраняются в одном файле, значение 1 включает эту функциональность. Используется только с соответствующим типом экспорта, а для пакетов предусмотрено другое поведение.Если директива включена с типом экспорта
PACKAGE, ora2pgpro создаёт отдельный каталог для каждого пакета с именем, называя его по имени пакета в нижнем регистре, и создаёт отдельные файлы для каждой функции/процедуры в этом каталоге. Если директива отключена, создаётся отдельный файл для каждого пакета с именемpackagename_OUTPUT, гдеOUTPUT— это значение соответствующей директивы.TRUNCATE_TABLEЕсли задано значение 1, перед загрузкой данных добавляется команда TRUNCATE TABLE. Используется только с типами экспорта
INSERTилиCOPY.Когда директива включена, команда добавляется, только если нет глобального предложения DELETE или для текущей таблицы (см. ниже).
DELETEВключает поддержку фильтрации по предложению DELETE FROM ... WHERE перед импортом данных с удалением строк вместо опустошения таблиц. Значение задаётся в таком формате:
TABLE_NAME[DELETE_WHERE_CLAUSE], или если есть только одно предложениеWHEREдля всех таблиц, задаётся одно предложениеDELETEв качестве значения. Можно задавать оба варианта одновременно. Примеры:DELETE 1=1 # Применяется ко всем таблицам и удаляет все кортежи DELETE TABLE_TEST[ID1='001'] # Применяется только к таблице TABLE_TEST DELETE TABLE_TEST[ID1='001' OR ID1='002] DATE_CREATE > '2001-01-01' TABLE_INFO[NAME='test']
Последний вариант применяет два разных предложения DELETE ... WHERE к таблицам
TABLE_TESTиTABLE_INFOи общее предложениеDELETEпоDATE_CREATEко всем остальным таблицам. Если директиваTRUNCATE_TABLEвключена, она применяется ко всем таблицам, к которым не применяетсяDELETE. Такие предложенияDELETEмогут быть полезны при обычных изменениях.STOP_ON_ERRORЗадайте для директивы значение 0, чтобы исключить вызов \set ON_ERROR_STOP ON из всех SQL-скриптов, создаваемых ora2pgpro. По умолчанию эта команда всегда присутствует, чтобы скрипт немедленно завершал работу при ошибках.
COPY_FREEZEВключите эту директиву, чтобы использовать
COPY FREEZEвместо обычноCOPYдля экспорта данных с уже замороженными строками. Это позволяет увеличить производительность при начальном добавлении данных. Строки будут замораживаться, только если загружаемая таблица была создана или опустошена в текущей подтранзакции. Работает только для экспорта в файл, когда не заданы ни параметр-J, ни директиваORACLE_COPIESили они равны 1. Может использоваться для импорта в Postgres Pro напрямую при тех же условиях, но-jиJOBSдолжны быть не заданы или равны 1.CREATE_OR_REPLACEПо умолчанию ora2pgpro использует CREATE OR REPLACE в функциях и представлениях. Если нет необходимости переопределять существующие функции или представления, отключите эту директиву, и команды не будут содержать OR REPLACE.
DROP_IF_EXISTSЧтобы добавлять команду DROP
ОБЪЕКТIF EXISTS перед созданием объекта, включите эту директиву. Может быть полезно в итерационной работе. По умолчанию директива отключена.EXPORT_GTTPostgres Pro не поддерживает глобальные временные таблицы, но для эмуляции этой функциональности можно использовать расширение pgtt. Включите эту директиву, чтобы экспортировать глобальные временные таблицы.
NO_HEADERЕсли включить эту директиву, ora2pgpro не будет добавлять заголовок в выходные файлы, будет записываться только преобразованный код.
PSQL_RELATIVE_PATHПо умолчанию ora2pgpro использует команду psql
\i, чтобы выполнять создаваемые SQL-файлы. Если задать эту директиву, будет использоваться команда\ir, чтобы интерпретировать имена файлов относительно каталога, в котором расположен скрипт. За подробной информацией обратитесь к справке по psql.DATA_VALIDATION_ROWSЧисло строк, которые необходимо получить с обеих сторон для проверки корректности данных. По умолчанию сравниваются первые 10000 строк. При значении 0 сравниваются все строки.
DATA_VALIDATION_ORDERINGПосле изменения данных порядок строк на обеих сторонах отличается. Директива включает упорядочивание данных по первичному ключу или уникальному индексу, так что данные таблицы без этих объектов сравнить невозможно. Если проверка корректности выполняется сразу после миграции, все таблицы могут быть проверены без упорядочивания.
DATA_VALIDATION_ERRORОстанавливает проверку данных таблицы после определённого количества несовпадающих строк. По умолчанию проверка останавливается после 10 строк с ошибками несовпадения.
TRANSFORM_VALUEИспользуйте эту директиву, чтобы указать тип трансформации, применяемый к столбцам при экспорте данных, в виде списка значений, разделённых точкой с запятой:
TABLE[COLUMN_NAME,
код в целевом списке SELECT]Например, чтобы заменить строку «Oracle» на «PostgreSQL» в столбце типа varchar2, используйте следующее значение:
TRANSFORM_VALUE ERROR_LOG_SAMPLE[DBMS_TYPE:regexp_replace("DBMS_TYPE",'Oracle','PostgreSQL')]Чтобы заменить все значения типа char(0) в строке пробельными символами:
TRANSFORM_VALUE CLOB_TABLE[CHARDATA:translate("CHARDATA", chr(0), ' ')]Выражение будет применяться в операторе SQL, используемом для извлечения данных из исходной базы данных.
Если для выгрузки данных в файл задан тип экспорта INSERT или COPY и включена директива FILE_PER_TABLE, будет выдано предупреждение, что ora2pgpro не будет экспортировать данные, если файл уже существует, чтобы не допустить повторную загрузку огромных таблиц. Чтобы принудительно загружать данные из таких таблиц, необходимо сначала удалить существующий выходной файл.
Если необходимо импортировать данные в БД Postgres Pro "на лету", можно настроить подключение, используя нижеописанные директивы, но только для типа экспорта COPY или INSERT, поскольку для схемы БД это не нужно.
PG_DSNИспользуйте эту директиву, чтобы задать пространство имён в качестве источника данных Postgres Pro, используя модуль Perl
DBD::Pgследующим образом:dbi:Pg:dbname=pgdb;host=localhost;port=5432
Он подключается к базе данных
pgdbнаlocalhostпо TCP-порту 5432.Обратите внимание, что эта директива используется только для экспорта данных, результаты других типов экспорта необходимо импортировать вручную с использованием psql или любого другого клиента Postgres Pro.
Чтобы использовать зашифрованное соединение SSL, необходимо добавить в строку подключения
sslmode=requireследующим образом:dbi:Pg:dbname=pgdb;host=localhost;port=5432;sslmode=require
PG_USER,PG_PWDЭти директивы используются, чтобы задать имя пользователя и пароль. Если не задать пароль в
PG_PWDи установить Perl-модульTerm::ReadKey, ora2pgpro запросит пароль интерактивно. Если имя пользователя не задано вPG_USER, его тоже нужно будет задать интерактивно.SYNCHRONOUS_COMMITУказывает, что записи WAL должны быть записаны на диск до того, как команда фиксации транзакции сообщит клиенту об успешном завершении. Функциональность равнозначна установке параметра
synchronous_commitв файлеpostgresql.conf. Используется только для загрузки данных в Postgres Pro напрямую, по умолчанию синхронная фиксация отключена для увеличения скорости записи данных.PG_INITIAL_COMMANDЭту директиву можно использовать для отправки начальных команд в Postgres Pro сразу после подключения, например, чтобы установить параметры сеанса. Директиву можно задавать несколько раз.