Импорт BLOB как больших объектов

По умолчанию ora2pgpro импортирует объекты BLOB как bytea, и целевой столбец создаётся с типом bytea. Если вместо bytea нужно использовать большие объекты, добавьте в команду ora2pgpro параметр --blob_to_lo. При этом создаётся целевой столбец типа oid и BLOB сохраняются как большие объекты с использованием функции lo_from_bytea(). OID, возвращаемый вызовом lo_from_bytea(), записывается в целевой столбец вместо типа bytea. Поскольку используется функция, параметр разрешается только с типами экспорта SHOW_COLUMN, TABLE и INSERT. С типом экспорта COPY использовать этот параметр не допускается.

Если используется тип экспорта COPY или есть огромные BLOB ( > 1ГБ), которые невозможно импортировать функцией lo_from_bytea(), в команду ora2pgpro можно добавить параметр --lo_import. Тогда данные можно будет импортировать в два этапа.

  1. Сначала экспортируйте данные с типом экспорта COPY или INSERT, в процессе чего в целевом столбце OID для BLOB проставляются 0, а значение BLOB сохраняется в отдельный файл. Также создаётся скрипт оболочки для импорта файлов BLOB в базу данных с помощью команды psql \lo_import и обновления столбца OID возвращаемыми значениями OID. Скрипт называется lo_import-TABLENAME.sh.

  2. Затем задайте переменную окружения PGDATABASE и, возможно, PGHOST, PGPORT, PGUSER и т. д., если их значения отличаются от значений по умолчанию в libpq, и выполните все скрипты lo_import-TABLENAME.sh.

Кроме того, можно вручную выполнить VACUUM FULL для таблицы, чтобы устранить раздувание, вызванное изменением таблицы.

Примечание

Ограничение: в таблице должен быть первичный ключ, он используется в предложениях WHERE для обновления столбца OID после импорта большого объекта. Импорт BLOB вторым способом (--lo_import) очень медленный, поэтому его лучше оставить для строк с BLOB > 1ГБ, а для других использовать --blob_to_lo. Чтобы отфильтровать строки, можно задать директиву WHERE в ora2pgpro.conf.