По умолчанию 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
. Тогда данные можно будет импортировать в два этапа.
Сначала экспортируйте данные с типом экспорта
COPY
илиINSERT
, в процессе чего в целевом столбце OID для BLOB проставляются 0, а значение BLOB сохраняется в отдельный файл. Также создаётся скрипт оболочки для импорта файлов BLOB в базу данных с помощью команды psql\lo_import
и обновления столбца OID возвращаемыми значениями OID. Скрипт называетсяlo_import-TABLENAME.sh
.Затем задайте переменную окружения
PGDATABASE
и, возможно,PGHOST
,PGPORT
,PGUSER
и т. д., если их значения отличаются от значений по умолчанию в libpq, и выполните все скриптыlo_import-TABLENAME.sh
.
Кроме того, можно вручную выполнить VACUUM FULL для таблицы, чтобы устранить раздувание, вызванное изменением таблицы.
Примечание
Ограничение: в таблице должен быть первичный ключ, он используется в предложениях WHERE
для обновления столбца OID после импорта большого объекта. Импорт BLOB вторым способом (--lo_import
) очень медленный, поэтому его лучше оставить для строк с BLOB > 1ГБ, а для других использовать --blob_to_lo
. Чтобы отфильтровать строки, можно задать директиву WHERE
в ora2pgpro.conf
.