Примеры pgloader: LOAD DATABASE, исключения таблиц и правки до/после загрузки
Идея сценария
LOAD DATABASE в pgloader описывает источник (mysql://…), приёмник (postgresql://…), режимы загрузки и произвольные SQL-кусочки до и после потока данных. Такой стиль удобен, когда нужно обойти ограничение по имени целевой схемы, временно ослабить FK или выкинуть технические таблицы очередей из миграции.
Типовой каркас
Ниже — обезличенный пример по мотивам рабочего файла: замените хосты, имена баз и учётку; не храните пароли в истории команд — используйте .pgpass, переменные окружения или секрет-хранилище.
LOAD DATABASE
FROM mysql://db_user:_password_@db.mysql.internal/app_core
INTO postgresql://pg_user:_password_@localhost/app_core
WITH data only, truncate, reset sequences
SET maintenance_work_mem TO '160MB',
work_mem TO '16MB',
search_path TO 'public'
BEFORE LOAD DO
$$ ALTER TABLE event_stream DROP CONSTRAINT IF EXISTS event_stream_owner_fkey CASCADE; $$,
$$ ALTER SCHEMA public RENAME TO app_core_restore; $$
AFTER LOAD DO
$$ ALTER SCHEMA app_core_restore RENAME TO public; $$,
$$ ALTER DATABASE app_core SET search_path TO public; $$,
$$ ALTER TABLE event_stream
ADD CONSTRAINT event_stream_owner_fkey
FOREIGN KEY (owner_uuid) REFERENCES users(uuid)
ON UPDATE CASCADE ON DELETE SET NULL; $$
EXCLUDING TABLE NAMES MATCHING ~/^telescope_/,
'pulse_entries', 'horizon_batches',
'job_batches', 'failed_jobs';
Ключевые моменты: BEFORE LOAD DO готовит схему, AFTER LOAD DO возвращает её в исходную форму для приложения; EXCLUDING TABLE NAMES MATCHING отсекает «шум», который не хотите тащить в новый инстанс.
Когда колонка с двоичными данными «ломает» потребление
Иногда после переноса поле с «резервной» двоичной сериализацией становится нечитаемым для нового приложения или драйвера. Если бизнес готов потерять содержимое в пользу целостности контура, на пост-этапе можно обнулить столбец (на копии и с подтверждением заказчика):
AFTER LOAD DO
$$ ALTER SCHEMA app_core_restore RENAME TO public; $$,
$$ UPDATE integration_accounts SET ldap_blob = NULL; $$;Мост к Битриксу
В типичном проекте на 1С‑Битрикс подобный файл чаще относится к сателлитным сервисам или самописным модулям, а не к b_* таблицам ядра. Тем не менее те же приёмы (переименование схемы, управление FK, список исключений) применимы при аккуратной репликации в PostgreSQL смежной подсистемы — с обязательным прогоном на staging и регрессионными проверками.
Итог
Декларативный файл pgloader позволяет совместить массовую загрузку и точечные DDL-операции. Держите сценарий под версионированием, прокатывайте изменения по окружениям и документируйте, зачем каждый блок BEFORE/AFTER был добавлен — через полгода это сэкономит часы расследований.
Не хотите копаться сами?
Починю за 1-3 дня. Без предоплаты — оплата по результату.
15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии