Сжать xlog при восстановлении базы данных postgres?

Для постгреса,

Я использовал «pg_dump» для сброса базы данных, а затем использовал «psql» для восстановления базы данных на другом сервере. Я обнаружил, что в pg_xlog/ создается огромный объем журналов WAL, которые занимают много места на диске.

Есть ли способ, которым postgres автоматически сжимает эти журналы WAL?

Я видел настройку «archive_command» в руководстве postgres. Это правильное направление?

Ян


person Yang    schedule 01.08.2013    source источник


Ответы (1)


Да, archive_command — это директива, которую вы ищете. Из руководства:

archive_command (string)

Команда оболочки, которую нужно выполнить для архивации завершенного сегмента файла WAL. Любой %p в строке заменяется путем к архивируемому файлу, а любой %f заменяется только именем файла. (Имя пути относится к рабочему каталогу сервера, т. е. к каталогу данных кластера.) Используйте %%, чтобы вставить фактический символ % в команду. Важно, чтобы команда возвращала нулевой статус выхода только в случае успеха. Для получения дополнительной информации см. Раздел 24.3.1.

Этот параметр можно задать только в файле postgresql.conf или в командной строке сервера. Он игнорируется, если только при запуске сервера не был включен archive_mode. Если archive_command является пустой строкой (по умолчанию), а archive_mode включен, архивирование WAL временно отключается, но сервер продолжает накапливать файлы сегментов WAL, ожидая, что вскоре будет предоставлена ​​команда. Установка archive_command на команду, которая ничего не делает, кроме как возвращает true, например. /bin/true (REM в Windows) эффективно отключает архивирование, но также разрывает цепочку файлов WAL, необходимых для восстановления архива, поэтому его следует использовать только в исключительных случаях.

В Вики Postgres есть один пример:

# Enable WAL archiving on the primary to an archive directory accessible from
# the standby. If wal_keep_segments is a high enough number to retain the WAL
# segments required for the standby server, this is not necessary.
archive_mode    = on
archive_command = 'cp %p /path_to/archive/%f'
person Community    schedule 16.01.2014