pg_recvlogical — управлять потоками логического декодирования PostgreSQL
pg_recvlogical [параметр...]
Утилита pg_recvlogical управляет слотами логического декодирования и принимает данные из таких слотов репликации.
Она создаёт соединение в режиме репликации, так что на него распространяются те же ограничения, что и с pg_receivewal, плюс ограничения логической репликации (см. Главу 49).
pg_recvlogical не предоставляет возможностей, соответствующих режимам peek и get в SQL-интерфейсе логического декодирования. Она передаёт серверу подтверждения воспроизведения данных по мере их получения и при штатном выходе. Чтобы просмотреть данные, ожидающие передачи через слот, не принимая их, воспользуйтесь функцией pg_logical_slot_peek_changes.
Когда утилита pg_recvlogical получает сигнал SIGHUP, она закрывает текущий выходной файл и открывает новый с именем файла, переданным с параметром --file. Таким образом обеспечивается ротация выходного файла сначала за счёт переименовывания текущего файла, а затем за счёт отправки сигнала SIGHUP утилите pg_recvlogical.
Для выбора действия необходимо указать минимум один из этих параметров:
--create-slotСоздать новый слот логической репликации с именем, заданным аргументом --slot, используя модуль вывода, заданный аргументом --plugin, для базы данных, указанной в --dbname.
Вы можете использовать параметр --two-phase с --create-slot, чтобы включить декодирование подготовленных транзакций.
--drop-slotУдалить слот репликации с именем, заданным аргументом --slot, и завершиться.
--startНачать приём потока изменений из слота логической репликации с именем, заданным аргументом --slot, и продолжать до сигнала прерывания. Если передача потока прерывается на другой стороне из-за выключения или остановки сервера, цикл подключения и передачи повторяется (если не добавлен параметр --no-loop).
Формат потока определяется модулем вывода, выбранным при создании слота.
Для получения потока подключаться нужно к той же базе, для которой создавался слот.
Параметры --create-slot и --start исключают друг друга. Действие --drop-slot несовместимо с любыми другими действиями.
Следующие параметры командной строки управляют расположением и форматом выводимых данных, а также другим поведением репликации:
-E lsn--endpos=lsnВ режиме --start автоматически закончить репликацию и выйти с кодом обычного завершения 0, когда при приёме данных достигается указанный LSN. Если этот ключ указывается не в режиме --start, выдаётся ошибка.
Если встречается запись с LSN, в точности равным lsn, эта запись будет выведена.
С указанием --endpos границы транзакций не отслеживаются, так что вывод программы может оказаться обрезанным посередине транзакции. Частично полученная транзакция не будет считаться принятой и будет воспроизведена заново при следующем чтении из этого слота. Отдельные сообщения не обрезаются никогда.
-f имя_файла--file=имя_файлаЗаписывать полученные и декодированные данные транзакций в указанный файл. Для вывода в stdout укажите - (минус).
-F секунды--fsync-interval=секундыУстанавливает, как часто pg_recvlogical будет вызывать fsync(), чтобы гарантировать, что выходной файл надёжно сохранён на диске.
Сервер время от времени даёт клиенту команду сохранить данные и сообщить сохранённую позицию, но этот параметр позволяет выполнять сохранение чаще.
При значении, равном 0, функция fsync() вообще не вызывается, но серверу сообщается новая позиция. Это может привести к потере данных в случае сбоя.
-I lsn--startpos=lsnВ режиме --start репликация начнётся с данного LSN. Как это работает, подробно описывается в Главе 49 и Разделе 55.4. В других режимах игнорируется.
--if-not-existsНе выдавать ошибку, когда указан параметр --create-slot и слот с заданным именем уже существует.
-n--no-loopКогда подключение к серверу потеряно, не повторять цикл, просто завершить работу.
-o имя[=значение]--option=имя[=значение]Передаёт параметр имя_параметра модулю вывода, при этом может быть передано и его значение. Набор параметров и их действия зависят от выбранного модуля вывода.
-P модуль--plugin=модульИспользовать указанный модуль вывода логического декодирования при создании слота. См. Главу 49. Этот параметр не действует, если слот уже существует.
-s секунды--status-interval=секундыЭтот параметр действует так же, как одноимённый параметр pg_receivewal (см. его описание там).
-S имя_слота--slot=имя_слотаЭтот параметр задаёт имя слота логической репликации, который будет использоваться в режиме --start, создаваться в режиме --create-slot или удаляться в режиме --drop-slot.
-t--two-phaseВключает декодирование подготовленных транзакций. Этот параметр можно указать только с --create-slot.
-v--verboseВключает режим подробных сообщений.
Далее описаны параметры управления подключением.
-d имя_бд--dbname=имя_бдИмя базы данных для подключения. Как именно используется данная база, рассказывается в описании действий программы. В данном аргументе может задаваться строка подключения. В этом случае параметры в строке подключения переопределяют одноимённые параметры, заданные в командной строке. По умолчанию в качестве имени базы выбирается имя пользователя.
-h имя_компьютера-или-ip--host=имя_компьютера-или-ipУказывает имя компьютера, на котором работает сервер. Если значение начинается с косой черты, оно определяет каталог Unix-сокета. Значение по умолчанию берётся из переменной окружения PGHOST, если она установлена. В противном случае выполняется подключение к Unix-сокету.
-p порт--port=портУказывает TCP-порт или расширение файла локального Unix-сокета, через который сервер принимает подключения. Значение по умолчанию определяется переменной окружения PGPORT, если она установлена, либо числом, заданным при компиляции.
-U user--username=userИмя пользователя для подключения. По умолчанию это имя текущего пользователя операционной системы.
-w--no-passwordНе выдавать запрос на ввод пароля. Если сервер требует аутентификацию по паролю и пароль не доступен с помощью других средств, таких как файл .pgpass, попытка соединения не удастся. Этот параметр может быть полезен в пакетных заданиях и скриптах, где нет пользователя, который вводит пароль.
-W--passwordПринудительно запрашивать пароль перед подключением к базе данных.
Это несущественный параметр, так как pg_recvlogical запрашивает пароль автоматически, если сервер проверяет подлинность по паролю. Однако чтобы понять это, pg_recvlogical лишний раз подключается к серверу. Поэтому иногда имеет смысл ввести -W, чтобы исключить эту ненужную попытку подключения.
Также есть следующие дополнительные параметры:
-V--versionСообщить версию pg_recvlogical и завершиться.
-?--helpПоказать справку по аргументам командной строки pg_recvlogical и завершиться.
Как и большинство других утилит PostgreSQL, приложение также использует переменные окружения, поддерживаемые libpq (см. Раздел 34.15).
Переменная окружения PG_COLOR выбирает вариант использования цвета в диагностических сообщениях. Возможные значения: always (всегда), auto (автоматически) и never (никогда).
pg_recvlogical сохранит разрешения для группы в полученных файлах WAL, если такие разрешения установлены в исходном кластере.
Примеры использования можно найти в Разделе 49.1.