F.48. pg_transfer

F.48.1. Описание
F.48.2. Установка
F.48.3. Использование
F.48.4. Совместимость

Расширение pg_transfer предоставляет возможность быстрого перемещения таблиц между экземплярами Postgres Pro Enterprise.

F.48.1. Описание

Для некоторых приложений узким местом является загрузка большего объёма данных в базу, например, при переносе данных с региональных серверов в центральный. Стандартным методом является перенос схемы и данных при помощи утилит pg_dump и pg_restore. При этом большая часть нагрузки приходится на принимающий сервер. Загрузка данных осуществляется командами INSERT или COPY, что значительно нагружает дисковую подсистему. Построение индексов и сбор статистики необходимо выполнить в целевой базе уже после загрузки данных.

С помощью расширения pg_transfer можно подготовить таблицу (построить индексы и собрать статистику) без участия целевого сервера и обеспечить большую скорость добавления данных только для чтения. Это расширение содержит дополнительные функции для использования утилитами pg_dump и pg_restore.

F.48.2. Установка

Для установки расширения необходимо выполнить следующую SQL-команду:

    CREATE EXTENSION pg_transfer;
   

F.48.3. Использование

Перед переносом таблицы необходимо перевести её в режим «только чтение».

    ALTER TABLE имя_таблицы SET CONSTANT;
   

После этого нужно выполнить VACUUM (ANALYZE) для удаления устаревших записей и обновления статистики.

    VACUUM (ANALYZE) имя_таблицы;
   

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

Когда исходная и целевая базы расположены в одной файловой системе, нужно как минимум один раз (при pg_dump или pg_restore) использовать ключ --copy-mode-transfer, чтобы получить независимую копию данных. Чтобы при переносе данных на ведущий сервер изменения реплицировались на ведомый, необходимо указать ключ --generate-wal для команды pg_restore.

Примечание

Архитектура и конфигурация обеих систем Postgres Pro Enterprise должны обеспечивать идентичность бинарного формата данных. При восстановлении выполняется проверка совпадения выравнивания, размеров страницы и сегмента и т. п.

F.48.3.1. Этап 1

      pg_dump база_данных -t имя_таблицы --schema-only -f каталог_для_переноса/archive.out
      pg_restore -d база_данных --schema-only каталог_для_переноса/archive.out
     

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

      psql целевая_база -c select reltoastrelid from pg_class where relname='имя_таблицы'
     

F.48.3.2. Этап 2

В обеих базах должно быть установлено расширение pg_transfer.

Используя полученный на предыдущем шаге идентификатор TOAST-таблицы (ид_таблицы_toast), подготовьте таблицу к переносу и выполните сброс данных на диск.

      psql -d база_данных -c select pg_transfer_freeze('имя_таблицы'::regclass::oid, id_таблицы_toast::oid);
     

F.48.3.3. Перенос данных

Подготовка данных завершена. Теперь можно перенести данные в отдельный каталог, используя утилиту pg_dump.

      pg_dump база_данных -Fc -t имя_таблицы --copy-mode-transfer --transfer-dir каталог_для_переноса/ -f каталог_для_переноса/archive.out
     

И наконец, можно восстановить данные в целевой базе данных.

      pg_restore -d целевая_база --data-only --transfer-dir каталог_для_переноса/ каталог_для_переноса/archive.out
     

F.48.4. Совместимость

Это расширение совместимо с серверами Postgres Pro 9.6 и новее в Unix-подобных системах.