• Почему возникает ошибка при восстановлении PiTR Postgres WAL-G?

    Melkij
    @Melkij
    собственно по первой маленькой базе выглядит так, что причина проблемы именно в малой активности и объёме. Нет WAL в архиве, перед которым нужно остановиться для достижения заданного recovery_target_time. А пока нет wal - recovery не может понять, то ли можно завершать работу уже т..к. изменений и не будет или это проблема и невозможно достичь заданного pitr т.к. отсутствуют требуемые wal.
    Для продакшена это можно решить используя archive_timeout - база будет по меньшей мере раз в этот интервал переключать сегмент wal и архивировать. Но на неактивной базе это соответственно даст много пустых WAL по объёму.

    по requested timeline 12 is not a child of this server's history - соответственно разбираться с таймлайнами. Каждый таймлайн - это promote (а так же успешный выход из point in time recovery при recovery_target_action = promote), то есть разветвление истории изменений. recovery_target_timeline можно использовать для восстановления на нужный timeline, но для этого, конечно, надо понимать, где какой таймлайн.
    Написано
  • Почему возникает ошибка при восстановлении PiTR Postgres WAL-G?

    Melkij
    @Melkij
    когда снятие этого бекапа base_000000180000000000000057 было завершено?
    00000019000000000000005D есть в архиве?
    что в wal_g_restore_command.log?
    Написано
  • Как запустить решить проблему с запуском postgresql?

    Melkij
    @Melkij
    "/var/lib/pgsql/15/data/" is missing or empty.
    вроде понятно написано
    Написано
  • Как скопировать данные с одной таблицы в другую и обновить данные?

    Melkij
    @Melkij
    попробую угадать, что id у вас был сделан типа serial, затем вставили какие-то строки с константными id, не дав сиквенсу выделить значения. Теперь сиквенс генерирует значения, по его мнению свободные, но которые уже записаны в таблицу вручную. Нужно выставить setval сиквенсу на следующее значение относительно реально существующих.
    Написано
  • Не открываются порты 8890, 8891, 5222. Что делать?

    Melkij
    @Melkij
    Вроде прослушиваются:

    иии где, например, 8890 или 5222?
    Написано
  • В postgresql параметр max_wal_size - размер всех сегментов или одного?

    Melkij
    @Melkij
    %f , %p и ещё пару замен делает в этой строке сам postgresql перед запуском этой команды на выполнение. Для запущенной команды на этих местах будут действительные строки с конкретным именем сегмента WAL и куда именно его надо положить для продолжения восстановления.

    Подход простой, хотя и архаичный. Закончили redo сегмента - дёрнули restore_command для получения следующего сегмента.
    Написано
  • В postgresql параметр max_wal_size - размер всех сегментов или одного?

    Melkij
    @Melkij
    restore_command = 'wal-g wal-fetch "%f" "%p"'
    раз архив есть всё равно.

    wal_keep_size (wal_keep_segments) константного размера хранение избыточных WAL как раз для реплик
    или слоты репликации. Если будете делать слоты - то желательно выставить какой-то max_slot_wal_keep_size чтобы забытый слот не уронил собственно базу, тем более если с мастера реплицируете

    по времени возможности нет.
    Написано
  • В postgresql параметр max_wal_size - размер всех сегментов или одного?

    Melkij
    @Melkij
    нет, никак не ограничивает. Размер одного сегмента WAL - это wal_segment_size. Задаётся только при initdb и меняется только чёрной магией которую я описывать не буду потому что часто приводит к необратимой потере всей базы.

    Если мне условно нужно хранить wal для последние 12 часов то это

    То это странная постановка задачи, уточните настоящую цель.
    Написано
  • Хранят ли доски объявлений удалённые объявления?

    Melkij
    @Melkij
    Потому что удаление записи из базы данных - это тяжелый запрос. Проще пометить как удаленный.

    Смотря какой базе. MVCC базам проще как раз удалить.
    Написано
  • Как правильно настроить pgbouncer и postregsql?

    Melkij
    @Melkij
    pool size = сколько коннектов базы может использовать баунсер для комбинации имя_пользователя + имя_бд.
    Может быть равен количеству бекенд серверов разве что по случайному совпадению.

    при pool mode=transaction коннект базы предоставляется подключённому к баунсеру клиенту на время этой транзакции (запрос вне транзакции так же есть транзакция). Пришло условно одновременно 30 запросов от разных клиентов - при pool size 20, 20 клиентов получили по коннекту с базой и начали выполняться, остальные начинают ждать пока освободится коннект базы. После завершения транзакции освободившийся коннект передаётся следующему желающему что-то сделать с базой.

    Один процесс базы не может выполнять одновременно два запроса, а значит получаем, что если запрос выполняется за 10мс, то при pool size 10 будет теоретический предел пропускной способности 1000rps.
    При том, что очень важно, это не значит что на всего 8-ядерном CPU при pool size 20 будет возможно удвоить результат. Результат может стать даже хуже, потому что конкурентные процессы будут драться между собой за CPU и активно мешать друг другу работать.

    Размер пула подбирается по действительной ситуации и по мониторингу.
    Написано
  • Как настроить рабочую среду для установки расширения pgTap?

    Melkij
    @Melkij
    contrib - это не про контрибьюторов, это contrib, набор всяких расширений в репозитории postgresql. Теоретически их можно не ставить, но фактически нужны буквально на каждой продовой базе, потому что именно там расположен pg_stat_statements. Даже если приложению не требуются какие-нибудь pgcrypto/ltree/pg_trgm или ещё чего полезное.

    лет 5 назад в deb репу даже прекратили собирать contrib в отдельный пакет, а перенесли в пакет сервера базы. Dervim пока что продолжает собирать отдельно для rpm.
  • Как настроить рабочую среду для установки расширения pgTap?

    Melkij
    @Melkij
    затрудняюсь ответить по такой экзотике. Я дебианщик, с yum на вы

    а вообще pgtap в репе вроде как лежит уже собранный https://yum.postgresql.org/15/redhat/rhel-7-x86_64...
  • Можно ли копировать PostgreSql с базами данных утилитой robocopy?

    Melkij
    @Melkij
    смотря на сколько корректно атомарный снэпшот при этом получается (и не выключали ли fsync, как 1с-ники обожают себе отстреливать ноги). В идеальном случае получается crash recovery, аналогичный сбою по питанию. С точки зрения СУБД ситуация ожидаемая, но тестировать бекап на возможность восстановиться из него всё равно нужно будет.
  • Можно ли копировать PostgreSql с базами данных утилитой robocopy?

    Melkij
    @Melkij
    Снимать файловый бекап при запущенной базе можно. Это делают все серьёзные утилиты бекапа postgresql: pgbackrest, wal-g, barman и прочие. Но для этого нужно соблюдать правила, которые требует сама база. К внимательному прочтению. Вот если у базы не попросить потребные данные для файлового бекапа - то это к приключениям и бекап выполнен неверно.

    Только в случае постгреса эти файлы не переносимы, развернуть их на другом сервере не выйдет.

    Ограниченно переносимы.
    Развернуть на подходящем сервере выйдет. Это просто частный случай настройки потоковой репликации. Копируется именно физический PGDATA, а не логический дамп.
    Основные ограничения: совпадение критичных для бинарной совместимости флагов компиляции. Сюрприз, даже другая аппаратная архитектура может не быть препятствием. Мы однажды с amd64 на arm64 перевозили базу физической репликацией даже.
  • Необходимо разъяснение по вопросу настройки связки 4g роутеров. Готов заплатить за решение, поможете?

    Melkij
    @Melkij
    я бы предложил сперва в MPTCP потыкаться, чем с агрегированием туннелей. Всё равно нужен гейт в обычную сеть, но по крайней мере MPTCP проектировался под такое использование.
  • Как безопасно перенести поврежденную БД?

    Melkij
    @Melkij
    лучше разобраться с конкретной первопричиной, которую вы не указали. Может оказаться сюрпризом позже, особенно при очередном wraparound.

    а между серверами postgresql обычно потоковой репликацией тягают, чем дампом.
  • Как избавиться от коррелирующего подзапроса?

    Melkij
    @Melkij
    distinct on в простом случае, потом lateral join, в финале рекурсивный loose index scan.
  • Миграция с Яндекс почты на MS Office365?

    Melkij
    @Melkij
    В интерфейсе админа домена должен быть включен IMAP.
    У каждого имени пользователя должен быть включен IMAP в своих настройках.
    Пароль для IMAP - не пароль учётки в яндексе, а отдельный пароль приложения (на вкладке безопасности каждого пользователя)

    По крайней мере так для меня с mbsync в новое место. Я не организация на сотню сотрудников, а одно физическое лицо со своим личным доменом.