Yandex Metrika
sanches.free

Примеры 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 дней гарантии