Расширение, которое ломает PostgreSQL... чтобы проверить выживет ли он 💥
Расширение, которое ломает PostgreSQL... чтобы проверить выживет ли он 💥 В сегодняшем «посте выходного дня» я продолжу начатую вчера тему о необычных расширениях для СУБД на базе PostgreSQL и расскажу Вам о pg_kaboom. Это, пожалуй, самый «разрушительный» и одновременно полезный для тестирования DR проект. Название обыгрывает англоязычное подражание звуку взрыва. По-русски это было бы «бабах!». Это расширение намеренно «крашит» сервер PostgreSQL самыми разными способами. Цель отнюдь не вредительство, а тестирование отказоустойчивости: можно симулировать нехватку места на диске, segfault, разрушение данных и другие катастрофы прямо из SQL-запроса. Это удобно для проверки систем автоматического переключения (failover) и отработки действий при сбоях. ⚠️ Критически важные предупреждения Никогда не используйте это расширение на production-средах. Оно предназначено исключительно для тестовых или изолированных сред. Защита «от дурака» также присутствует. Функции не сработают, пока вы не установите специальный параметр pg_kaboom.disclaimer в значение 'I can afford to lose this data and server'. Для некоторых способов уничтожить сервер дополнительно требуется pg_kaboom.execute = on. 🛠️ Установка и использование 1. Установка расширения в БД (предполагается, что само расширение уже скомпилировано): ```sql CREATE EXTENSION pg_kaboom; ``` 2. Установка «предохранителя» (обязательно в каждой сессии): ```sql SET pg_kaboom.disclaimer = 'I can afford to lose this data and server'; -- При необходимости: SET pg_kaboom.execute = on; ``` 3. Вызов основной функции: pg_kaboom(text) с названием выбранного Вами «оружия». 4. Вспомогательная функция pg_kaboom_arsenal() возвращает таблицу со списком всех доступных «оружий». ☠️ Арсенал «оружия» · break-archive — устанавливает нерабочую команду archive_command и заставляет сервер перезапуститься, что приводит к сбою архивации WAL. · fill-log — заполняет всё доступное пространство в каталоге логов (log_directory). · fill-pgdata — заполняет всё доступное пространство в основном каталоге данных ($PGDATA). · fill-pgwal — заполняет всё доступное пространство в каталоге WAL ($PGDATA/pg_wal), что быстро приводит к остановке сервера. · mem — выделяет большой объём оперативной памяти, провоцируя OOM-killer или сбой. · restart — выполняет немедленный перезапуск сервера. · rm-pgdata — выполняет rm -Rf $PGDATA. Самый разрушительный вариант. · segfault — вызывает segmentation fault в работающем бэкенд-процессе. · signal — отправляет сигнал SIGKILL процессу Postmaster. · xact-wrap — быстро вызывает переполнение счётчика транзакций. · random — выбирает случайное «оружие» из списка и применяет его. Отличный способ проверить устойчивость инфраструктуры к заранее неизвестному сбою сервера. · null — не делает ничего. Это расширение — мощный инструмент в руках инженера, который хочет убедиться, что его система готова к худшему. Но, как и любой мощный инструмент, он требует предельной осторожности.