Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Доступны в регионе
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • AI Studio
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Партнёрская программа
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»
Yandex Data Transfer
  • Доступные трансферы
  • Начало работы
    • Все инструкции
    • Подготовка к трансферу
      • Управление эндпоинтами
      • Миграция эндпоинтов в другую зону доступности
        • Источник
        • Приемник
    • Управление трансфером
    • Работа с базами данных во время трансфера
    • Мониторинг состояния трансфера
  • Решение проблем
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Публичные материалы
  • Обучающие курсы

В этой статье:

  • Сценарии передачи данных в PostgreSQL
  • Настройка источника данных
  • Подготовка базы данных приемника
  • Настройка эндпоинта-приемника PostgreSQL
  • Кластер Managed Service for PostgreSQL
  • Пользовательская инсталляция
  • Дополнительные настройки
  • Действия с базой данных во время трансфера
  • Решение проблем, возникающих при переносе данных
  • Остановка сессии мастер-транзакции трансфера
  • Превышение квоты на длительность соединения
  • Ошибка трансфера при переносе представлений (VIEW)
  • Ошибка добавления записи в таблицу по constraint
  • Ошибка при переносе всех таблиц схемы
  • Невозможно создать объекты с участием функций расширения
  • Низкая скорость трансфера
  • Не переносятся таблицы-наследники
  • Не хватает слотов репликации в базе данных источника
  • Перестали переноситься данные после изменения эндпоинта-источника
  • Ошибка трансфера при смене хоста-мастера
  • Ошибка при трансфере вложенных транзакций
  • Ошибка трансфера таблиц с отложенными ограничениями
  • Не удается создать слот репликации на стадии активации
  • Чрезмерное увеличение журнала WAL
  • Ошибка при репликации из внешнего источника
  • Ошибка трансфера при переносе таблиц без первичных ключей
  • Повторяющееся значение ключа нарушает уникальное ограничение
  • Ошибка удаления таблицы при политике очистки Drop
  • Ошибка при переносе таблиц с генерируемыми столбцами
  1. Пошаговые инструкции
  2. Настройка эндпоинтов
  3. PostgreSQL
  4. Приемник

Передача данных в эндпоинт-приемник PostgreSQL

Статья создана
Yandex Cloud
Обновлена 19 июня 2025 г.
  • Сценарии передачи данных в PostgreSQL
  • Настройка источника данных
  • Подготовка базы данных приемника
  • Настройка эндпоинта-приемника PostgreSQL
    • Кластер Managed Service for PostgreSQL
    • Пользовательская инсталляция
    • Дополнительные настройки
  • Действия с базой данных во время трансфера
  • Решение проблем, возникающих при переносе данных
    • Остановка сессии мастер-транзакции трансфера
    • Превышение квоты на длительность соединения
    • Ошибка трансфера при переносе представлений (VIEW)
    • Ошибка добавления записи в таблицу по constraint
    • Ошибка при переносе всех таблиц схемы
    • Невозможно создать объекты с участием функций расширения
    • Низкая скорость трансфера
    • Не переносятся таблицы-наследники
    • Не хватает слотов репликации в базе данных источника
    • Перестали переноситься данные после изменения эндпоинта-источника
    • Ошибка трансфера при смене хоста-мастера
    • Ошибка при трансфере вложенных транзакций
    • Ошибка трансфера таблиц с отложенными ограничениями
    • Не удается создать слот репликации на стадии активации
    • Чрезмерное увеличение журнала WAL
    • Ошибка при репликации из внешнего источника
    • Ошибка трансфера при переносе таблиц без первичных ключей
    • Повторяющееся значение ключа нарушает уникальное ограничение
    • Ошибка удаления таблицы при политике очистки Drop
    • Ошибка при переносе таблиц с генерируемыми столбцами

С помощью сервиса Yandex Data Transfer вы можете переносить данные в базу PostgreSQL и реализовывать различные сценарии переноса, обработки и трансформации данных. Для реализации трансфера:

  1. Ознакомьтесь с возможными сценариями передачи данных.
  2. Настройте один из поддерживаемых источников данных.
  3. Подготовьте базу данных PostgreSQL к трансферу.
  4. Настройте эндпоинт-приемник в Yandex Data Transfer.
  5. Создайте и запустите трансфер.
  6. Выполняйте необходимые действия по работе с базой и контролируйте трансфер.
  7. При возникновении проблем, воспользуйтесь готовыми решениями по их устранению.

Сценарии передачи данных в PostgreSQLСценарии передачи данных в PostgreSQL

  1. Миграция — перенос данных из одного хранилища в другое. Часто это перенос базы из устаревших локальных баз в управляемые облачные.

    • Миграция кластера PostgreSQL;
    • Миграция из AWS RDS for PostgreSQL;
    • Миграция со сменой хранилища: MySQL® в PostgreSQL.
  2. Поставка данных — процесс доставки произвольных данных в целевые хранилища. Процесс поставки включает извлечение данных из очереди и их десериализацию с последующей трансформацией данных в формат целевого хранилища.

    • Поставка данных из Apache Kafka® в PostgreSQL.
  3. Загрузка данных в витрины — процесс трансфера подготовленных данных в хранилища с целью последующей визуализации.

    • Загрузка данных из Greenplum® в PostgreSQL;
    • Загрузка данных из Object Storage в PostgreSQL.

Подробное описание возможных сценариев передачи данных в Yandex Data Transfer см. в разделе Практические руководства.

Настройка источника данныхНастройка источника данных

Настройте один из поддерживаемых источников данных:

  • PostgreSQL;
  • MySQL®;
  • Greenplum®;
  • Apache Kafka®;
  • Airbyte®;
  • YDS;
  • Yandex Object Storage;
  • Oracle.

Полный список поддерживаемых источников и приемников в Yandex Data Transfer см. в разделе Доступные трансферы.

Подготовка базы данных приемникаПодготовка базы данных приемника

Managed Service for PostgreSQL
PostgreSQL
  1. Убедитесь, что мажорная версия PostgreSQL на приемнике не ниже версии на источнике.

  2. При трансфере из PostgreSQL включите те же расширения в базе приемника, что и в базе источника.

    Если в базе источника расширения установлены в пользовательскую схему, и эти расширения используются в DDL переносимых объектов, то вручную создайте в приемнике DDL. В этих DDL обращение к функции должно быть без указания схемы. В политике очистки эндпоинта-приемника установите значение Truncate, чтобы трансфер не удалил эти объекты.

  3. Выберите политику очистки таблиц трансфера Drop.

    Если вы вручную создали в приемнике DDL, используйте политику Truncate. При политике Truncate эти DDL не будут удалены.

  4. Создайте пользователя с доступом к базе приемника.

  5. Выдайте созданному пользователю все привилегии на базу данных, схемы и переносимые таблицы:

    GRANT ALL PRIVILEGES ON DATABASE <имя_базы> TO <имя_пользователя>;
    

    Если база не пустая, то пользователь должен быть ее владельцем (owner):

    ALTER DATABASE <имя_базы> OWNER TO <имя_пользователя>;
    

    После старта трансфер подключится к приемнику от имени этого пользователя.

  6. Если в приемнике включена опция сохранение границ транзакций, выдайте созданному пользователю все привилегии на создание служебной таблицы __data_transfer_lsn в текущей схеме (обычно public) на приемнике:

    GRANT ALL PRIVILEGES ON SCHEMA <имя_схемы> TO <имя_пользователя>;
    
  7. Настройте количество подключений пользователя к базе данных.

  1. Если вы не планируете использовать для подключения к внешнему кластеру сервис Cloud Interconnect или VPN, разрешите подключения к такому кластеру из интернета с IP-адресов, используемых сервисом Data Transfer.

    Подробнее о настройке сети для работы с внешними ресурсами см. в концепции.

  2. Убедитесь, что мажорная версия PostgreSQL на приемнике не ниже версии на источнике.

  3. Включите те же расширения в базе приемника, что и в базе источника.

  4. Убедитесь, что на приемнике выбрана политика очистки DROP таблиц трансфера.

  5. Создайте пользователя:

    CREATE ROLE <имя_пользователя> LOGIN ENCRYPTED PASSWORD '<пароль>';
    
  6. Выдайте созданному пользователю все привилегии на базу данных, схемы и переносимые таблицы:

    GRANT ALL PRIVILEGES ON DATABASE <имя_базы> TO <имя_пользователя>;
    

    Если база не пустая, то пользователь должен быть ее владельцем (owner):

    ALTER DATABASE <имя_базы> OWNER TO <имя_пользователя>;
    

    После старта трансфер подключится к приемнику от имени этого пользователя.

  7. Если в приемнике включена опция сохранение границ транзакций, выдайте созданному пользователю все привилегии на создание служебной таблицы __data_transfer_lsn в текущей схеме (обычно public) на приемнике:

    GRANT ALL PRIVILEGES ON SCHEMA <имя_схемы> TO <имя_пользователя>;
    
  8. Настройте количество подключений пользователя к базе данных.

Данные, хранящиеся в MATERIALIZED VIEW, не переносятся. Для переноса данных из MATERIALIZED VIEW создайте обыкновенный VIEW, ссылающийся на переносимый MATERIALIZED VIEW.

Если определение переносимого VIEW содержит вызов VOLATILE функции, то трансфер читает данные из такого VIEW с уровнем изоляции READ UNCOMMITTED. Консистентность между данными в этом VIEW и данными других переносимых объектов не гарантируется. Чтение из MATERIALIZED VIEW в определении VIEW равносильно вызову VOLATILE функции.

Настройка эндпоинта-приемника PostgreSQLНастройка эндпоинта-приемника PostgreSQL

При создании или изменении эндпоинта вы можете задать:

  • Настройки подключения к кластеру Yandex Managed Service for PostgreSQL или пользовательской инсталляции, в т. ч. на базе виртуальных машин Yandex Compute Cloud. Эти параметры обязательные.
  • Дополнительные параметры.

Кластер Managed Service for PostgreSQLКластер Managed Service for PostgreSQL

Важно

Для создания или редактирования эндпоинта управляемой базы данных вам потребуется роль managed-postgresql.viewer или примитивная роль viewer, выданная на каталог кластера этой управляемой базы данных.

Подключение к БД с указанием идентификатора кластера в Yandex Cloud.

Консоль управления
CLI
Terraform
API
  • Тип подключения — выберите вариант подключения к базе данных:

    • Ручная настройка — позволяет задать настройки подключения вручную.

      Выберите тип инсталляции Кластер Managed Service for PostgreSQL и задайте настройки:

      • Кластер Managed Service for PostgreSQL — укажите идентификатор кластера, к которому необходимо подключиться.

      • База данных — укажите имя базы данных в выбранном кластере.

      • Пользователь — укажите имя пользователя, под которым сервис Data Transfer будет подключаться к базе данных.

      • Пароль — укажите пароль пользователя для доступа к базе данных.

    • Connection Manager — позволяет использовать управляемое подключение к базе данных через Yandex Connection Manager:

      • Выберите каталог, в котором находится кластер Managed Service for PostgreSQL.

      • Выберите тип инсталляции Кластер управляемой БД и задайте настройки:

        • Кластер Managed Service for PostgreSQL — укажите идентификатор кластера, к которому необходимо подключиться.

        • Подключение — укажите идентификатор управляемого подключения в Connection Manager.

        • База данных — укажите имя базы данных в выбранном кластере.

      Важно

      Чтобы использовать подключение из Connection Manager, у пользователя должны быть права доступа не ниже connection-manager.user к этому подключению.

  • Группы безопасности — выберите облачную сеть для размещения эндпоинта и группы безопасности для сетевого трафика.

    Это позволит применить к ВМ и кластерам в выбранной сети указанные правила групп безопасности без изменения настроек этих ВМ и кластеров. Подробнее см. в разделе Сеть в Yandex Data Transfer.

  • Тип эндпоинта — postgres-target.
  • --cluster-id — идентификатор кластера, к которому необходимо подключиться.

  • --database — имя базы данных.

  • --user — имя пользователя, под которым сервис Data Transfer будет подключаться к базе данных.

  • Чтобы задать пароль пользователя для доступа к базе данных, используйте один из параметров:

    • --raw-password — пароль в текстовом виде.

    • --password-file — путь к файлу с паролем.

  • Тип эндпоинта — postgres_target.
  • security_groups — группы безопасности для сетевого трафика.

    Правила групп безопасности применяются к трансферу. Они позволяют открыть сетевой доступ с ВМ трансфера к кластеру. Подробнее см. в разделе Сеть в Yandex Data Transfer.

    Группы безопасности должны принадлежать той же сети, в которой размещен кластер.

    Примечание

    В Terraform сеть для групп безопасности задавать не нужно.

  • connection.mdb_cluster_id — идентификатор кластера, к которому необходимо подключиться.

  • database — имя базы данных.

  • user — имя пользователя, под которым сервис Data Transfer будет подключаться к базе данных.

  • password.raw — пароль в текстовом виде.

Пример структуры конфигурационного файла:

resource "yandex_datatransfer_endpoint" "<имя_эндпоинта_в_Terraform>" {
  name = "<имя_эндпоинта>"
  settings {
    postgres_target {
      security_groups = ["<список_идентификаторов_групп_безопасности>"]
      connection {
        mdb_cluster_id = "<идентификатор_кластера>"
      }
      database = "<имя_переносимой_базы_данных>"
      user     = "<имя_пользователя_для_подключения>"
      password {
        raw = "<пароль_пользователя>"
      }
    }
  }
}

Подробнее см. в документации провайдера Terraform.

  • securityGroups — группы безопасности для сетевого трафика, правила которых применятся к ВМ и кластерам без изменения их настроек. Подробнее см. в разделе Сеть в Yandex Data Transfer.

  • mdbClusterId — идентификатор кластера, к которому необходимо подключиться.

  • database — имя базы данных.

  • user — имя пользователя, под которым сервис Data Transfer будет подключаться к базе данных.

  • password.raw — пароль пользователя для доступа к базе данных (в текстовом виде).

Пользовательская инсталляцияПользовательская инсталляция

Для случая OnPremise все поля заполняются вручную.

Консоль управления
CLI
Terraform
API
  • Тип подключения — выберите вариант подключения к базе данных:

    • Ручная настройка — позволяет задать настройки подключения вручную.

      Выберите тип инсталляции Пользовательская инсталляция и задайте настройки:

      • Хост — укажите IP-адрес или FQDN хоста-мастера. Если на хостах открыты разные порты для подключения, то вы можете задать несколько значений хостов в формате хост:порт. Если вы выбираете такой формат, то значение поля Порт не будет учитываться.

      • Порт — укажите номер порта, который сервис Data Transfer будет использовать для подключения.

      • База данных — укажите имя базы данных в пользовательской инсталляции.

      • Пользователь — укажите имя пользователя, под которым сервис Data Transfer будет подключаться к базе данных.

      • Пароль — укажите пароль пользователя для доступа к базе данных.

      • Сертификат CA — загрузите файл сертификата или добавьте его содержимое в текстовом виде, если требуется шифрование передаваемых данных, например, для соответствия требованиям PCI DSS.

        Важно

        Если не добавить сертификат, трансфер может завершиться ошибкой.

      • Идентификатор подсети — выберите или создайте подсеть в нужной зоне доступности. Трансфер будет использовать эту подсеть для доступа к кластеру.

        Если значение в этом поле задано для обоих эндпоинтов, то обе подсети должны быть размещены в одной зоне доступности.

    • Connection Manager — позволяет использовать управляемое подключение к базе данных через Yandex Connection Manager:

      • Выберите каталог, в котором создано управляемое подключение Connection Manager.

      • Выберите тип инсталляции Пользовательская инсталляция и задайте настройки:

        • Подключение — укажите идентификатор управляемого подключения в Connection Manager.

        • База данных — укажите имя базы данных в пользовательской инсталляции.

        • Идентификатор подсети — выберите или создайте подсеть в нужной зоне доступности. Трансфер будет использовать эту подсеть для доступа к кластеру.

          Если значение в этом поле задано для обоих эндпоинтов, то обе подсети должны быть размещены в одной зоне доступности.

      Важно

      Чтобы использовать подключение из Connection Manager, у пользователя должны быть права доступа не ниже connection-manager.user к этому подключению.

  • Группы безопасности — выберите облачную сеть для размещения эндпоинта и группы безопасности для сетевого трафика.

    Это позволит применить к ВМ и кластерам в выбранной сети указанные правила групп безопасности без изменения настроек этих ВМ и кластеров. Подробнее см. в разделе Сеть в Yandex Data Transfer.

  • Тип эндпоинта — postgres-target.
  • --host — IP-адрес или FQDN хоста-мастера, к которому необходимо подключиться.

  • --port — номер порта, который сервис Data Transfer будет использовать для подключения.

  • --ca-certificate — сертификат CA, если требуется шифрование передаваемых данных, например для соответствия требованиям PCI DSS.

    Важно

    Если не добавить сертификат, трансфер может завершиться ошибкой.

  • --subnet-id — идентификатор подсети, в которой находится хост. Трансфер будет использовать эту подсеть для доступа к хосту.

  • --database — имя базы данных.

  • --user — имя пользователя, под которым сервис Data Transfer будет подключаться к базе данных.

  • Чтобы задать пароль пользователя для доступа к базе данных, используйте один из параметров:

    • --raw-password — пароль в текстовом виде.

    • --password-file — путь к файлу с паролем.

  • Тип эндпоинта — postgres_target.
  • security_groups — группы безопасности для сетевого трафика.

    Правила групп безопасности применяются к трансферу. Они позволяют открыть сетевой доступ с ВМ трансфера к ВМ c базой данных. Подробнее см. в разделе Сеть в Yandex Data Transfer.

    Группы безопасности должны принадлежать той же сети, что и подсеть subnet_id, если она указана.

    Примечание

    В Terraform сеть для групп безопасности задавать не нужно.

  • on_premise.hosts — список IP-адресов или FQDN хостов, к которым необходимо подключиться. Так как поддерживается только список из одного элемента, укажите адрес хоста-мастера.

  • on_premise.port — номер порта, который сервис Data Transfer будет использовать для подключения.

  • on_premise.tls_mode.enabled.ca_certificate — сертификат CA, если требуется шифрование передаваемых данных, например для соответствия требованиям PCI DSS.

    Важно

    Если не добавить сертификат, трансфер может завершиться ошибкой.

  • on_premise.subnet_id — идентификатор подсети, в которой находится хост. Трансфер будет использовать эту подсеть для доступа к хосту.

  • database — имя базы данных.

  • user — имя пользователя, под которым сервис Data Transfer будет подключаться к базе данных.

  • password.raw — пароль в текстовом виде.

Пример структуры конфигурационного файла:

resource "yandex_datatransfer_endpoint" "<имя_эндпоинта_в_Terraform>" {
  name = "<имя_эндпоинта>"
  settings {
    postgres_target {
      security_groups = ["<список_идентификаторов_групп_безопасности>"]
      connection {
        on_premise {
          hosts = ["<список_хостов>"]
          port  = <порт_для_подключения>
        }
      }
      database = "<имя_переносимой_базы_данных>"
      user     = "<имя_пользователя_для_подключения>"
      password {
        raw = "<пароль_пользователя>"
      }
    }
  }
}

Подробнее см. в документации провайдера Terraform.

  • onPremise — параметры подключения к базе данных:
    • hosts — IP-адрес или FQDN хоста-мастера, к которому необходимо подключиться.

    • port — номер порта, который сервис Data Transfer будет использовать для подключения.

    • tlsMode — параметры шифрования передаваемых данных, если оно требуется, например для соответствия требованиям PCI DSS.

      • disabled — отключено.
      • enabled — включено
        • caCertificate — сертификат CA.

          Важно

          Если не добавить сертификат, трансфер может завершиться ошибкой.

    • subnetId — идентификатор подсети, в которой находится хост. Трансфер будет использовать эту подсеть для доступа к хосту.

  • securityGroups — группы безопасности для сетевого трафика, правила которых применятся к ВМ и кластерам без изменения их настроек. Подробнее см. в разделе Сеть в Yandex Data Transfer.

  • database — имя базы данных.

  • user — имя пользователя, под которым сервис Data Transfer будет подключаться к базе данных.

  • password.raw — пароль пользователя для доступа к базе данных (в текстовом виде).

Дополнительные настройкиДополнительные настройки

Консоль управления
Terraform
API
  • Политика очистки — выберите способ очистки данных в базе-приемнике перед переносом:

    • Не очищать — выберите эту опцию, если будет производиться только репликация без копирования данных.

    • Drop — полное удаление таблиц, участвующих в трансфере (вариант по умолчанию).

      Используйте эту опцию, чтобы при любой активации трансфера в базу-приемник всегда передавалась самая последняя версия схемы таблиц из источника.

    • Truncate — удалить только данные из таблиц, участвующих в трансфере, но оставить схему.

      Используйте эту опцию, если схема в базе-приемнике отличается от той, которая была бы перенесена из источника при трансфере.

  • Сохранение границ транзакций — включите, чтобы сервис записывал данные в базу-приемник только после полного чтения данных транзакции из базы-источника.

    Рекомендуется включать настройку при трансфере из PostgreSQL в PostgreSQL. Это может немного снизить производительность трансфера, но позволит избежать ошибок, связанных с нарушением ограничений.

    Важно

    Эта функциональность находится на стадии Preview.

  • Не применять изменения схемы — выберите, чтобы не изменять схему данных на приемнике при изменении ее на источнике. По умолчанию при изменении схемы на источнике трансфер будет автоматически применять изменения схемы в приемнике: создавать новые таблицы, добавлять новые колонки, добавлять новые перечисляемые значения и перечисляемые типы. По умолчанию не применяются такие изменения, как удаление таблиц или колонок.

  • cleanup_policy — способ очистки данных в базе-приемнике перед переносом:

    • DISABLED — не очищать (вариант по умолчанию).

      Выберите эту опцию, если будет производиться только репликация без копирования данных.

    • DROP — полное удаление таблиц, участвующих в трансфере.

      Используйте эту опцию, чтобы при любой активации трансфера в базу-приемник всегда передавалась самая последняя версия схемы таблиц из источника.

    • TRUNCATE — удалить только данные из таблиц, участвующих в трансфере, но оставить схему.

      Используйте эту опцию, если схема в базе-приемнике отличается от той, которая была бы перенесена из источника при трансфере.

  • is_schema_migration_disabled — установите значение true, чтобы не изменять схему данных на приемнике при изменении ее на источнике. По умолчанию при изменении схемы на источнике трансфер будет автоматически применять изменения схемы в приемнике: создавать новые таблицы, добавлять новые колонки, добавлять новые перечисляемые значения и перечисляемые типы. По умолчанию не применяются такие изменения, как удаление таблиц или колонок.

cleanupPolicy — способ очистки данных в базе-приемнике перед переносом:

  • DISABLED — не очищать (вариант по умолчанию).

    Выберите эту опцию, если будет производиться только репликация без копирования данных.

  • DROP — полное удаление таблиц, участвующих в трансфере.

    Используйте эту опцию, чтобы при любой активации трансфера в базу-приемник всегда передавалась самая последняя версия схемы таблиц из источника.

  • TRUNCATE — удалить только данные из таблиц, участвующих в трансфере, но оставить схему.

    Используйте эту опцию, если схема в базе-приемнике отличается от той, которая была бы перенесена из источника при трансфере.

После настройки источника и приемника данных создайте и запустите трансфер.

Действия с базой данных во время трансфераДействия с базой данных во время трансфера

Совет

Протокол репликации PostgreSQL не поддерживает передачу изменения схемы данных. Избегайте изменения схемы данных в базах источника и приемника во время трансфера. Если избежать этого невозможно, проведите явные проверки на приемнике.

Для трансферов типа Копирование и Копирование и репликация:

  • в статусе Копируется запрещено изменять схему данных на источнике и приемнике;

  • в статусе Реплицируется любые изменения схемы данных на источнике вручную примените на приемнике, иначе трансфер не сможет продолжить работу.

    Например, пусть в таблицу test_table источника добавили новый столбец:

    ALTER TABLE test_table ADD COLUMN val2 TEXT;
    

    Если запись в эту таблицу продолжается, трансфер не сможет выполнить вставку данных на приемнике. Чтобы репликация продолжилась, выполните аналогичный запрос на изменение схемы данных на приемнике:

    ALTER TABLE test_table ADD COLUMN val2 TEXT;
    

    После этого трансфер сможет продолжить работу.

Решение проблем, возникающих при переносе данныхРешение проблем, возникающих при переносе данных

Известные проблемы, связанные с использованием эндпоинта PostgreSQL:

  • Остановка сессии мастер-транзакции трансфера
  • Превышение квоты на длительность соединения
  • Ошибка трансфера при переносе представлений (VIEW)
  • Ошибка добавления записи в таблицу по constraint
  • Ошибка при переносе всех таблиц схемы
  • Невозможно создать объекты с участием функций расширения
  • Низкая скорость трансфера
  • Не переносятся таблицы-наследники
  • Не хватает слотов репликации в базе данных источника
  • Перестали переноситься данные после изменения эндпоинта-источника
  • Ошибка трансфера при смене хоста-мастера
  • Ошибка при трансфере вложенных транзакций
  • Ошибка трансфера таблиц с отложенными ограничениями
  • Не удается создать слот репликации на стадии активации
  • Чрезмерное увеличение журнала WAL
  • Ошибка при репликации из внешнего источника
  • Ошибка трансфера при переносе таблиц без первичных ключей
  • Повторяющееся значение ключа нарушает уникальное ограничение
  • Ошибка удаления таблицы при политике очистки Drop
  • Ошибка при переносе таблиц с генерируемыми столбцами

См. полный список рекомендаций в разделе Решение проблем.

Остановка сессии мастер-транзакции трансфераОстановка сессии мастер-транзакции трансфера

Текст ошибки:

Cannot set transaction snapshot:
ERROR: invalid snapshot identifier: "<идентификатор_снапшота>" (SQLSTATE 22023).

Возможные причины:

  • На источнике работает cron-задание или другое приложение, которое периодически завершает слишком длительные сессии.
  • Кто-то вручную завершил мастер-транзакцию.
  • Ресурсов CPU на источнике не хватает для выполнения запроса.
  • В настройке кластера PostgreSQL Session duration timeout установлено ограничение на время жизни активной сессии.

Решение: отключите такое cron-задание, добавьте дополнительные ресурсы для CPU на источник, а также установите значение параметра Session duration timeout равным 0 на время трансфера. После внесения изменений активируйте трансфер повторно.

Превышение квоты на длительность соединенияПревышение квоты на длительность соединения

В Yandex Managed Service for PostgreSQL существует квота на длительность соединения — 12 часов.
​
​Решение: если перенос базы данных требует больше времени, измените настройку кластера Yandex Managed Service for PostgreSQL Session duration timeout.

Ошибка трансфера при переносе представлений (VIEW)Ошибка трансфера при переносе представлений (VIEW)

Текст ошибки:

[ERROR] "... _view": no key columns found

Репликация новых данных из представлений невозможна. При трансфере PostgreSQL — PostgreSQL переносятся только те представления, которые указаны в параметре эндпоинта-источника Фильтр таблиц → Список включенных таблиц.

Решение: вручную исключите из трансфера все представления, записав их в параметре эндпоинта-источника Фильтр таблиц → Список исключённых таблиц, после чего активируйте трансфер повторно.

Ошибка добавления записи в таблицу по constraintОшибка добавления записи в таблицу по constraint

Решение: подготовьте источник в соответствии с разделом Подготовка к трансферу.

Ошибка при переносе всех таблиц схемыОшибка при переносе всех таблиц схемы

Текст ошибки:

Unable to apply DDL of type 'TABLE', name '<схема>'.'<таблица>', error:
ERROR: schema "<схема>" does not exist (SQLSTATE 3F000)

Трансфер прерывается при указании списка таблиц определенной схемы в виде <схема>.*. Это происходит из-за особенностей работы утилиты pg_dump, которая используется для переноса схемы. При указании таблиц всей схемы <схема>.* в параметре эндпоинта-источника Фильтр таблиц → Список включенных таблиц типы PostgreSQL из этой схемы не извлекаются, даже если в схеме есть таблицы, зависящие от этих типов.

Решение: создайте типы PostgreSQL в базе-приемнике вручную.

Невозможно создать объекты с участием функций расширенияНевозможно создать объекты с участием функций расширения

Текст ошибки:

Unable to apply DDL of type 'TABLE', <имя_объекта>, error:
failed to push non-row item 0 of kind "pg:DDL" in batch:
Push failed: ERROR: function <имя_схемы>.<имя_функции>() does not exist 
(SQLSTATE 42883)

В Managed Service for PostgreSQL в базе-приемнике невозможно установить расширение в пользовательскую схему. Поэтому трансфер прерывается, если в пользовательской инсталляции Managed Service for PostgreSQL есть расширения, установленные в пользовательскую схему, и эти расширения используются в DDL переносимых объектов.

Решение: проверьте DDL объектов, имена которых указаны в ошибке. Если в этих объектах есть вызов функций из пользовательской схемы, вручную создайте в приемнике DDL, которые вызывают функции без указания схемы. В политике очистки эндпоинта-приемника установите значение Truncate, чтобы трансфер не удалил эти объекты.

Низкая скорость трансфера Низкая скорость трансфера

​Может возникать у трансферов типа Копирование или Копирование и репликация из PostgreSQL в PostgreSQL.

Возможные причины:

  • Протокол записи.

    В нормальном режиме трансфер работает через быстрый протокол copy, но при конфликтах записи батча переходит на медленную построчную запись. Чем больше конфликтов записи, тем ниже скорость трансфера.

    Решение: установите в эндпоинте-приемнике тип политики очистки Drop и исключите другие пишущие процессы.

  • Параллельность чтения таблиц.

    Параллельность доступна только для таблиц, которые содержат первичный ключ. При использовании ключа типа serial части таблиц читаются по диапазонам. Другие типы ключей позволяют равномерно распределять таблицы в соответствии со специальным алгоритмом.

    Решение: настройте параллельное копирование и активируйте трансфер повторно.

Не переносятся таблицы-наследникиНе переносятся таблицы-наследники

Во время трансфера не переносятся таблицы-наследники, либо переносятся без данных, если таблица партицированная.

Решение: установите следующие параметры эндпоинта-источника:

  1. Включите опцию Объединить наследуемые таблицы в расширенных настройках.
  2. Укажите в поле Список включенных таблиц все таблицы-наследники, данные которых нужно перенести.
  3. Убедитесь, что у пользователя есть доступ к таблицам-наследникам.

Для увеличения скорости трансфера при переносе таблиц-наследников настройте параллельное копирование.

Не хватает слотов репликации в базе данных источникаНе хватает слотов репликации в базе данных источника

Текст ошибки:

Warn(Activate): failed to create a replication slot "<идентификатор_трансфера>" at source:
failed to create a replication slot:
failed to create a replication slot:
ERROR: all replication slots are in use
(SQLSTATE 53400)

Решение: увеличьте количество слотов репликации в базе-источнике (по умолчанию 10).

Перестали переноситься данные после изменения эндпоинта-источникаПерестали переноситься данные после изменения эндпоинта-источника

После добавления таблиц в Список включенных таблиц в параметрах эндпоинта-источника трансфер перезапустился и перестал переносить данные.

Решение:

  • Создайте таблицы в базе-приемнике вручную.

    1. Создайте в базе-приемнике новые таблицы с Primary Key и без Foreign key.
    2. Добавьте новые таблицы в Список включенных таблиц в параметрах эндпоинта-источника.
    3. Перенесите дамп с историческими данными в базу-приемник.
    4. При появлении в логах ошибок решите их согласно конкретной ошибке.
    5. Если ошибок нет, но логи пусты, обратитесь в техническую поддержку или к вашему аккаунт-менеджеру для снятия дампа горутин. Это может помочь восстановить репликацию без повторного запуска трансфера.

  • Деактивируйте и активируйте трансфер повторно.

  • Создайте отдельный трансфер типа Копирование для новых таблиц. При этом исходный трансфер можно не деактивировать.

Ошибка трансфера при смене хоста-мастераОшибка трансфера при смене хоста-мастера

Ошибка возникает в трансферах типа Репликация или Копирование и репликация из-за отсутствия нужных частей Write-Ahead Log (WAL). Это происходит, когда отставание логической репликации WAL с текущего мастера на реплику превышает доступный объем WAL на других хостах. Поэтому при переключении мастера на эту реплику слот репликации не может синхронизироваться с WAL на новом мастере.

Решение: увеличьте лимит в дополнительном параметре эндпоинта-источника Максимальный размер WAL для слота репликации и активируйте трансфер повторно.

Ошибка при трансфере вложенных транзакцийОшибка при трансфере вложенных транзакций

Трансфер PostgreSQL версий ниже 14 не поддерживает перенос таблиц с примененными транзакциями, которые вложены более 1024 раз и на каждом уровне вложенности есть изменения для репликации. Количество вложенностей определяется по числу вложенных конструкций begin; .. commit;.

Решение:

  • Используйте PostgreSQL версии 14 или выше.
  • Исключите из трансфера транзакции с таким уровнем вложенности.

Ошибка трансфера таблиц с отложенными ограничениямиОшибка трансфера таблиц с отложенными ограничениями

Ошибка возникает в трансферах типа Репликация или Копирование и репликация, так как обновление таблиц и транзакций с отложенными (DEFERRABLE) ограничениями не поддерживается Data Transfer. Подробнее об отложенных ограничениях см. в документации PostgreSQL.

Решение: замените тип ограничений в таких таблицах на IMMEDIATE и активируйте трансфер повторно.

Не удается создать слот репликации на стадии активацииНе удается создать слот репликации на стадии активации

В начале работы трансфера создается один или несколько слотов репликации в базе-источнике. При этом объекты базы блокируются. Если какой-то объект заблокирован другой транзакцией, возникнет конкурирующая блокировка, и трансфер завершится с ошибкой.

Решение:

  1. Найдите PID процесса, конкурирующего за блокировки с трансфером:

    /* поиск PID трансфера */
    SELECT active_pid
      FROM pg_replication_slots
      WHERE slot_name = '<ID_трансфера>';
    
    /* поиск PID блокирующего процесса */
    SELECT pid, pg_blocking_pids(pid) as blocked_by
      FROM pg_stat_activity
      WHERE cardinality(pg_blocking_pids(pid)) > 0;
    
            pid      | blocked_by
    -----------------+-------------------
     <PID_трансфера> | {<PID_блокирующей_транзакции>}
    (1 row)
    
  2. Посмотрите блокирующий запрос:

    SELECT query, usename
      FROM pg_stat_activity
      WHERE pid = <PID_блокирующей_транзакции>;
    
  3. (Опционально) Остановите транзакцию командой:

    SELECT pg_terminate_backend(<PID_блокирующей_транзакции>);
    
  4. Активируйте трансфер повторно.

Чрезмерное увеличение журнала WALЧрезмерное увеличение журнала WAL

В базе данных источника PostgreSQL размер журнала Write-Ahead Log (WAL) достигает значения десятков гигабайт из-за долгих запросов (выполняющихся более 5 минут). Такие запросы блокируют журнал WAL и не дают ему продвинуться вперед и очиститься.

Увеличение размера журнала WAL можно заметить по:

  • увеличению места, занимаемого базой данных источника;
  • возрастанию графика Read buffer size в мониторинге Data Transfer.

Решение:

  1. Найдите сессии запросов, выполняющиеся дольше 5 минут:

    SELECT now()-xact_start, query, pid FROM pg_stat_activity
    WHERE (now()-xact_start)>'5minute'::interval AND STATE != 'idle'
    ORDER BY 1 DESC;
    
  2. Завершите найденные сессии. Старайтесь не допускать появления таких запросов.

Ошибка при репликации из внешнего источникаОшибка при репликации из внешнего источника

Текст ошибки:

[XX000] ERROR: could not connect to the publisher:
SSL error: certificate verify failed FATAL:
no pg_hba.conf entry for replication connection
from host "<IP-адрес_хоста_PostgreSQL>", user "postgres", SSL off

Решение: подготовьте источник в соответствии с разделом Подготовка к трансферу.

Ошибка трансфера при переносе таблиц без первичных ключейОшибка трансфера при переносе таблиц без первичных ключей

Текст ошибки:

Primary key check failed: 14 Tables errors: Table no key columns found

Для типов трансфера Репликация и Копирование и репликация таблицы без первичных ключей не переносятся.

Решение: подготовьте источник в соответствии с разделом Подготовка к трансферу.

Повторяющееся значение ключа нарушает уникальное ограничениеПовторяющееся значение ключа нарушает уникальное ограничение

Текст ошибки:

ERROR: duplicate key value violates unique constraint "<название_ограничения>" (SQLSTATE 23505)

Ошибка может возникнуть при репликации данных из PostgreSQL в PostgreSQL. Например, когда не все события транзакции поместились в память и в базу-приемник передана только часть строк транзакции из базы-источника. В базе-приемнике эта часть строк по умолчанию применяется в отдельной транзакции, поэтому в определенный момент времени может возникнуть нарушение ограничений, например дублирование ключа.

Решение: используйте один из вариантов:

  • Для эндпоинта-приемника включите расширенную настройку Сохранение границ транзакций. Data Transfer откроет транзакцию, применит пришедшие события, но выполнит коммит транзакции, только когда начнет получать данные следующей транзакции.

    Включение настройки Сохранение границ транзакций может немного снизить производительность трансфера, но позволит избежать ошибок, связанных с нарушением ограничений.

  • Отключите в базе-приемнике ограничения. В определенный момент времени возможно нарушение ограничений (например, когда применена часть транзакции из базы-источника в базе-приемнике). Но Data Transfer гарантирует согласованность данных в итоге (eventually consistency) — когда вторая часть транзакции применится в базе-приемнике, нарушения ограничений не будет.

Ошибка удаления таблицы при политике очистки DropОшибка удаления таблицы при политике очистки Drop

Текст ошибки:

ERROR: cannot drop table <имя_таблицы> because other objects depend on it (SQLSTATE 2BP01)

При политике очистки Drop трансфер удаляет таблицы в несколько итераций:

  1. Трансфер последовательно пытается удалить все таблицы. Каскадное удаление не используется, так как может привести к удалению таблиц, не участвующих в трансфере. Если таблицу невозможно удалить, например, из-за связанности внешними ключами, возникает ошибка, но трансфер продолжит удаление таблиц.

  2. Во время следующей итерации трансфер пытается удалить оставшиеся таблицы. Если блокирующие дочерние таблицы были удалены в предыдущей итерации, таблица со связанностью внешними ключами удаляется. В этом случае ошибка устраняется в процессе работы Data Transfer, дополнительных действий не требуется.

  3. Если во время очередной итерации трансфер не удалил ни одной таблицы, процесс удаления таблиц завершается. При этом:

    • Трансфер продолжит работу, если все таблицы были удалены.
    • Трансфер прервется с ошибкой, если остались неудаленные таблицы.

Решение:

  • Если дочерние таблицы не участвуют в других трансферах и их перенос не противоречит целям трансфера, добавьте эти таблицы:

    • В список включенных таблиц в параметрах эндпоинта-источника.
    • В список объектов для переноса в параметрах трансфера.
  • Удалите блокирующие дочерние таблицы в базе-приемнике вручную.

  • Используйте политику очистки Truncate.

  • Пересоздайте базу в приемнике.

    Важно

    Это приведет к потере всех данных в базе.

Ошибка при переносе таблиц с генерируемыми столбцамиОшибка при переносе таблиц с генерируемыми столбцами

Текст ошибки:

ERROR: column "<имя_столбца>" is a generated column (SQLSTATE 42P10)

Ошибка может возникнуть, если из базы-источника переносится таблица, которая содержит генерируемые столбцы. Например, если генерируемый столбец определен как столбец идентификаторов (GENERATED ... AS IDENTITY), то ошибка возникнет при репликации данных. Если генерируемый столбец вычисляемый, то ошибка возникнет независимо от типа трансфера. Подробнее о генерируемых столбцах см. в документации PostgreSQL.

Решение: в параметрах эндпоинта-источника исключите из трансфера таблицы, которые содержат генерируемые столбцы.

Была ли статья полезна?

Предыдущая
Источник
Следующая
Источник
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»