Как удалить базу данных PostgreSQL: DROP DATABASE и очистка

Всем привет! Сегодня разберёмся, как удалить базу данных в 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 (пошагово)

  1. Устанавливаем PostgreSQL:
    
    # Для Ubuntu/Debian
    sudo apt update
    sudo apt install postgresql
    
    # Для CentOS/RHEL
    sudo yum install postgresql-server
    
    # Для macOS (через Homebrew)
    brew install postgresql
        

    Официальная страница загрузки

  2. Запускаем сервис:
    
    sudo systemctl start postgresql
    sudo systemctl enable postgresql
        
  3. Проверяем доступ:
    
    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

  1. Открываем pgAdmin, подключаемся к серверу.
  2. Находим базу в списке слева, ПКМ → «Delete/Drop».
  3. Подтверждаем удаление.

Очистить базу, но не удалять (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 — это навсегда!

Официальная документация DROP DATABASE

Хотите прочитать больше про Администрирование?
Отзывов нет.

Ваш отзыв

Пожалуйста, заполните поля снизу и добавьте отзыв!.
Имя *
E-mail *
Сайт
Сообщение *