Имею резервный сервер, на котором крутятся два SQL-сервера на разных портах (5432 и 5433): один (5432) в режиме hot-standby (streaming replication), другой (5433) - полигон для разработчиков прикладного ПО - в режиме master (primary), с wal_level=minimal и archive_mode=off. Физически БД, обслуживаемые этими SQL-серверами располагаются на разных дисковых устройствах, смонтированных в одной ОС. Понятно, что данные на первом (5432) обновляются автоматически. А на втором (полигоне, 5433) нужно раз в день(ночь) обновлять с основного сервера утилитой pg_basebackup. Вот только время, затраченное на перекачивание БД по локальной сети слишком велико, и ресурсы, отнятые у "боевого" сервера на копирование данных, - тоже . Возникает резонный вопрос: если на резервном сервере уже есть актуальная копия БД (hot-standby), не будет ли логичнее снять копию для полигона с неё, ведь копирование внутри системы с диска на диск на порядкок быстрее? Прямо этого сделать не получается, т.к. требуется перевод резервного SQL-сервера в режим master, чего мы себе позволить не можем, т.к. потом не сможем перевести его обратно в hot-standby. Остаётся остановить hot-standby сервер, сделать файловую копию в целевой каталог полигона и поднять оба: резервный в режиме hot-standby, как он и был (без проблем), а полигон - с конфигурацией полигона. Вот тут и возникает большое "НО", вызванное "нештатным размножением". Вроде бы полигон поднимается. И даже накатывает журналы из WAL-архива. Но где-то в мозгах у него прочно сидит память о прошлой жизни в виде устаревшей временной таблицы. И на эту таблицу каждую минуту ругается в логе процесс autovacuum. Можно, конечно, эту ругань игнорировать, можно ручками убить таблицу, "но всё-таки, доктор, непорядочек", как в известном анекдоте. Посему вопрос: есть ли другие способы "сделать мне красиво" или поправить после того, как я "сделал почти красиво"? Да, кстати, и исчерпывается ли этими мелочами такой способ получения копии?
P.S.: pg_xlog_replay_pause() на hot-standby не помогает - pg_basebackup не запускается.
В документации написано, что
В документации написано, что стэндбай сервер позволяет работать с запросами, которые не изменяют данные. Тогда вопрос - а pg_dump на нём можно запустить?
pg_dump
Ответ: можно, если в процессе получения дампа данные на основном сервере не менялись, что маловероятно, но возможно в принципе (это я пробовал). Вот только по SQL-дампу потом долго восстанавливается БД, слишком долго по сравнению с файловым дампом... Я лишь ищу способ, как более эффективно по времени сделать рабочую копию БД и развернуть на ней полигон со свежими данными на утро. Копировать hot-standby на том же железе показалось мне хорошей идеей. И она работает, хоть это и нештатная процедура. Если нет других советов, - что ж, оставлю всё так. Тем более, что проблема появления устаревших временных таблиц решается разрывом текущих пользовательских соединений на основном сервере перед остановкой резервного для копирования на полигон. Не очень красиво, но ночью допустимо.