Как стать автором
Обновить

PostgreSQL 17: уже можно просто делать бекапы и перестать страдать?

Время на прочтение10 мин
Количество просмотров16K
Всего голосов 29: ↑29 и ↓0+36
Комментарии17

Комментарии 17

Спасибо за статью.

Подскажите пожалуйста, у pg_probackup v3 будет все таки бесплатная версия или он будет доступен только как часть Enterprise-редакции?

Это станет известно ближе к релизу, потому что вот так звёзды складываются, что прямо сейчас никто вам на этот вопрос точно не ответит.

но поддержка 17 не заявлена на https://github.com/postgrespro/pg_probackup

как и тут https://repo.postgrespro.ru/pg_probackup/deb/pool/main-noble/p/ нету 17

а для своих продуктов они используют не публичную версию которая в нумерации давно ушла вперед

К сожалению да, я тоже давно заметил, что публичная версия pg_probackup v2 безнадежно отстала от закрытой версии. Только мелкие багфиксы и никакого развития :(

А чего конкретно не хватает в публичной, из того что есть в закрытой?

Встречный вопрос - а что есть в закрытой? Она на то и закрытая, что ченджлог доступен только энтерпрайз пользователям.

В открытой нехватает хранения бэкапов в s3

Но вы так уверенно говорите, что публичная версия пробекапа безнадёжно отстала и там никакого развития, будто у вас есть список того чем обделили.

Список то есть. Посмотрите на количество issue, их 160 штук и кажется что они никогда не будут закрыты. Там и ошибки и предложения нового функционала, например 2 моих предложения раз и два - и вроде бы не сложно и вроде как нужно, но не реализовано и в то же время не отклонены. Или реализовано, но в закрытой версии? Тут я не знаю тк доступа к закрытой версии у меня нет.

Супер, спасибо. Насколько я знаю PM'ы ишуи регулярно смотрят и самое интересное берётся в разработку. В ent версии действительно что-то уже сделано, но, как я говорил выше, надо дождаться выхода тройки, потому что основные усилия разработчиков сейчас там.

Ну, если честно, то первое предложение - прямо классический кейс когда проще дописать и PR прислать, чем просить и ждать.

Ну если честно, то сомнительно, что туда что-то примут. Посмотрите список PR, висящих годами.

Я в курсе, что есть разница в версиях pg-probackup:

Инструкция по установке Postgres Pro Standard 16.4.1 не работает.
https://postgrespro.com/products/download
Postgres Pro Std 17 в репах пока нет.

возврат БД postgres на произвольно выбранный момент времени путем накатывания реду логов на бекап начнет работать без боли когда - нибудь?

сейчас это делается ПРИМЕРНО так, извините за мой LLM
никогда так не делал ввиду лени

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

  1. Создайте новый кластер PostgreSQL для восстановления:

    pg_createcluster [version] recovery

    Например: pg_createcluster 16 recovery

  2. Остановите новый кластер:

    pg_ctlcluster [version] recovery stop
  3. Очистите каталог данных нового кластера:

    sudo rm -rf /var/lib/postgresql/[version]/recovery/*
  4. Восстановите базовый бэкап только нужной базы данных в новый кластер:

    pg_restore -C -d postgres -U postgres -h localhost -p [port_of_new_cluster] [path_to_backup_file]

    Флаг -C создаст базу данных, если она не существует.

  5. Создайте файл recovery.signal в каталоге данных нового кластера:

    sudo touch /var/lib/postgresql/[version]/recovery/recovery.signal
  6. Отредактируйте postgresql.conf нового кластера:

    sudo nano /var/lib/postgresql/[version]/recovery/postgresql.conf

    Добавьте следующие строки:

    restore_command = 'cp /path/to/archive/%f %p'
    recovery_target_time = '2024-10-24 14:30:00'
    recovery_target_action = 'promote'
  7. Запустите новый кластер:

    pg_ctlcluster [version] recovery start
  8. Мониторьте процесс восстановления в логах:

    sudo tail -f /var/log/postgresql/postgresql-[version]-recovery.log
  9. После завершения восстановления, проверьте состояние базы данных:

    psql -p [port_of_new_cluster] -d [restored_db_name]
  10. Если все в порядке, вы можете остановить оригинальный кластер и скопировать восстановленную базу данных обратно:

    pg_dumpall -p [port_of_new_cluster] -d [restored_db_name] | psql -p [port_of_original_cluster] -d postgres
  11. Удалите временный кластер:

    pg_dropcluster [version] recovery

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

Важные замечания:

  • Убедитесь, что у вас достаточно места на диске для создания временного кластера.

  • Проверьте, что порты нового и оригинального кластеров не конфликтуют.

  • Всегда делайте резервную копию перед выполнением операций восстановления.

  • В зависимости от версии PostgreSQL, некоторые команды или файлы конфигурации могут слегка отличаться.

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

Есть ещё pgBackRest утилитка, хотелось бы почитать сравнение с ней

Зарегистрируйтесь на Хабре, чтобы оставить комментарий