Всем привет! Сегодня разберёмся, как удалить базу данных в PostgreSQL: разберём DROP DATABASE
, альтернативные способы очистки, подводные камни и реальные кейсы. Почему это важно? Потому что удаление БД — не просто «очистить место», а часто часть CI/CD, миграций, тестирования и даже спасение от багов. Но если сделать что-то не так — можно улететь в продакшн и потерять данные навсегда. Будем разбирать всё по шагам, без занудства и воды.
Возможности
- DROP DATABASE — стандартная команда для удаления базы вместе со всеми таблицами, индексами и данными.
- Очистка (TRUNCATE/DELETE) — если надо оставить структуру, но убрать данные.
- pgAdmin и psql — удалять можно как из консоли, так и через GUI.
- Скрипты и автоматизация — пригодится для CI/CD пайплайнов.
Что требуется
- ОС: Linux, macOS, Windows — всё подойдёт. В примерах будет Linux, но отличия минимальны.
- Железо: Любое, где крутится PostgreSQL. Для удаления БД особых требований нет.
- Права: Нужен пользователь с правами
DROP
на базу или суперюзер (postgres
). - Доступ к серверу: Локально или по SSH, главное — есть psql или pgAdmin.
Установка PostgreSQL (пошагово)
- Устанавливаем PostgreSQL:
# Для Ubuntu/Debian sudo apt update sudo apt install postgresql # Для CentOS/RHEL sudo yum install postgresql-server # Для macOS (через Homebrew) brew install postgresql
- Запускаем сервис:
sudo systemctl start postgresql sudo systemctl enable postgresql
- Проверяем доступ:
sudo -u postgres psql
Если зашли в psql — всё ок.
Использование: команды и варианты
Удаляем базу через psql
-- Входим в psql (от postgres или другого суперпользователя)
psql -U postgres
-- Смотрим список баз
\l
-- Завершаем все соединения с базой (иначе DROP не сработает)
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'имя_бд';
-- Удаляем базу
DROP DATABASE имя_бд;
Удаляем базу через команду psql из shell
psql -U postgres -c "DROP DATABASE имя_бд;"
Через pgAdmin
- Открываем pgAdmin, подключаемся к серверу.
- Находим базу в списке слева, ПКМ → «Delete/Drop».
- Подтверждаем удаление.
Очистить базу, но не удалять (TRUNCATE)
-- В psql:
TRUNCATE TABLE table1, table2 RESTART IDENTITY CASCADE;
Внимание: TRUNCATE удаляет только данные, структура (таблицы, схемы) останется!
Скрипт для CI/CD (bash + psql)
#!/bin/bash
DB="testdb"
USER="postgres"
psql -U $USER -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '$DB';"
psql -U $USER -c "DROP DATABASE IF EXISTS $DB;"
Ошибки и как делать не надо
- Не удаляйте базу, если есть активные соединения! — получите ошибку:
ERROR: database "имя_бд" is being accessed by other users
. Сначала завершите соединения. - Не запускайте DROP DATABASE в продакшене без 300% уверенности! — бэкапы настраивайте заранее.
- Не используйте
DROP DATABASE
для очистки данных! — если нужна только очистка, используйтеTRUNCATE
илиDELETE
. - Не забывайте про зависимости! — если база используется в связке с другими сервисами, удаление может всё сломать.
Пример реального использования
Допустим, есть окружение для автотестов, где каждый запуск CI должен создавать чистую базу. Скрипт в пайплайне:
psql -U postgres -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'ci_test_db';"
psql -U postgres -c "DROP DATABASE IF EXISTS ci_test_db;"
psql -U postgres -c "CREATE DATABASE ci_test_db;"
После этого миграции, тесты и т.д. Всё чисто, никаких «хвостов» от прошлых прогонов.
Заключение
Удаление базы в PostgreSQL — несложная, но ответственная задача. Всегда проверяйте, что удаляете нужную базу, завершайте все соединения, делайте бэкапы. Для автоматизации используйте скрипты, для ручной работы — psql или pgAdmin. И помните: DROP DATABASE — это навсегда!
Ваш отзыв