yandex
Калькулятор ценТарифыАкцииДокументацияО насКарьера в Cloud.ruНовостиЮридические документыКонтактыРешенияРеферальная программаКейсыПартнерство с Cloud.ruБезопасностьEvolutionAdvancedEvolution StackОблако VMwareВ чем отличия платформ?БлогОбучение и сертификацияМероприятияИсследования Cloud.ruЛичный кабинетВойтиЗарегистрироватьсяОблако для мобильных и веб‑приложенийСайт в облакеАналитика данных в облакеХранение данных в облакеАналитика данных в облакеИнфраструктура для 1С в облакеМиграция IT‑инфраструктуры в облако3D-моделирование и рендерингРазработка и тестирование в облакеEvolution ComputeEvolution Managed KubernetesEvolution Object StorageEvolution Managed PostgreSQL®Evolution Bare MetalEvolution SSH KeysEvolution ImageEvolution DNSEvolution VPCEvolution Load BalancerEvolution Magic RouterEvolution DiskEvolution Container AppsEvolution Artifact RegistryEvolution Managed ArenadataDBEvolution Managed TrinoEvolution Managed SparkEvolution ML InferenceEvolution Distributed TrainEvolution ML FinetuningEvolution NotebooksEvolution TagsEvolution Task HistoryCurator Anti-DDoSCurator Anti‑DDoS+WAFUserGate: виртуальный NGFWStormWall: Anti-DDoSCloud MonitoringCloud LoggingАренда GPUDirect ConnectCDNCloud AdvisorCross-platform connectionAdvanced Object Storage ServiceAdvanced Elastic Cloud ServerAdvanced Relational Database Service for PostgreSQLAdvanced Image Management ServiceAdvanced Auto ScalingAdvanced Enterprise RouterAdvanced Cloud Backup and RecoveryAdvanced Data Warehouse ServiceAdvanced Elastic Volume ServiceAdvanced Cloud Container EngineAdvanced FunctionGraphAdvanced Container Guard ServiceAdvanced Software Repository for ContainerAdvanced Document Database Service with MongoDBAdvanced Relational Database Service for MySQLAdvanced Relational Database Service for SQL ServerAdvanced Server Migration ServiceAdvanced Data Replication ServiceAdvanced API GatewayAdvanced CodeArtsAdvanced Distributed Message Service for KafkaAdvanced Distributed Message Service for RabbitMQAdvanced DataArts InsightAdvanced CloudTableAdvanced MapReduce ServiceAdvanced Cloud Trace ServiceAdvanced Application Performance ManagementAdvanced Identity and Access ManagementAdvanced Enterprise Project Management ServiceVMware: виртуальный ЦОД с GPUVMware: виртуальный ЦОДУдаленные рабочие столы (VDI)VMware: резервное копирование виртуальных машинVMware: резервный ЦОДVMware: резервное копирование в облакоVMware: миграция виртуальных машин
Связаться с нами

DROP DATABASE в PostgreSQL: полное руководство по удалению БД

Удаление ненужных, дублирующихся и тестовых баз данных (БД) в PostgreSQL — процесс несложный, но ответственный. Если сделать что-то не так, можно потерять важную информацию. Рассказываем, как действовать безошибочно и что учесть. 

Инструкции
Иллюстрация для статьи на тему «DROP DATABASE в PostgreSQL: полное руководство по удалению БД »
Продукты из этой статьи:
Иконка-Evolution Managed PostgreSQL®
Evolution Managed PostgreSQL®

Подготовка к удалению базы данных

Удаление БД — необратимое действие, которое уничтожает все объекты базы: таблицы, индексы, ключи, функции и данные. Если нет резервной копии или настроенного механизма PITR (Point-In-Time Recovery — восстановление на момент времени с использованием WAL-логов), восстановить удаленное стандартными средствами PostgreSQL не получится. В некоторых конфигурациях с непрерывным архивированием WAL данные могут быть восстановлены до определенного момента времени даже без явно созданного бэкапа, но это требует предварительной настройки и не отменяет необходимость регулярного резервного копирования.  

Предварительные шаги

Проверьте, есть ли резервные копии баз данных. Если нет, сделайте их с помощью утилиты pg_dump, которая позволяет сохранять структуру БД и содержимое в виде SQL-скрипта или архива. Проверьте корректность созданных копий. Убедитесь, что файлы сохранились полностью и без ошибок. 

В средах с высокими требованиями к безопасности дополнительно применяются физические бэкапы — с помощью утилиты pg_basebackup (которая создает побитовую копию всего кластера через протокол репликации PostgreSQL) или с помощью инструментов резервного копирования на уровне файловой системы (например, rsync, снапшоты LVM/ZFS, dd). 

Можно настроить резервное копирование автоматически с помощью сервиса Evolution Managed PostgreSQL от Cloud.ru. В нем также реализована возможность Point-in-Time Recovery (PITR) — восстановления данных на любой момент времени. 

Проверка активных подключений

Удалить базу данных PostgreSQL не получится, если к ней есть активные подключения. Это защитный механизм: СУБД предотвращает случайное удаление БД, с которой прямо сейчас работают пользователи или приложения. Перед удалением проверьте, кто и как использует базу. 

Информация о подключениях отображается в системном представлении pg_stat_activity. Администратор может выполнить запрос и увидеть все сессии, связанные с нужной БД. Активные подключения необходимо правильно завершить с помощью функции pg_terminate_backend.

В версиях 9.1 и ниже для идентификации подключений используется колонка procpid, а не pid. Начиная с версии 9.2 и выше используйте колонку pid. Для завершения подключений потребуются права суперпользователя или членство в роли pg_signal_backend.

Перед этим нужно найти приложения и сервисы, которые используют базу данных, чтобы у пользователей не выходили сообщения об ошибке подключения. 

Дарим до 20 000 бонусов
Дарим до 20 000 бонусов
4 000 бонусов — физическим лицам, 20 000 бонусов — юридическим

Использование команды DROP DATABASE

Для удаления базы данных из кластера PostgreSQL применяется SQL-команда DROP DATABASE. Чтобы правильно ее использовать, разберитесь в синтаксисе и доступных опциях. 

Базовый синтаксис

В базовом виде команда содержит имя базы данных, которая будет удалена. Синтаксис выглядит так:

Чтобы выполнить команду, нужно быть владельцем базы данных или иметь привилегию DROP. Если условия не соблюдены, сервер откажет в операции. 

Опция IF EXISTS

Опция IF EXISTS поможет предотвратить ошибки, если база данных не существует. Без нее PostgreSQL прерывает выполнение команды DROP DATABASE, что нежелательно при автоматическом развертывании окружений и в скриптах администрирования. 

Если используется IF EXISTS, сервер не выдает ошибку и не завершает выполнение команды. Он выводит предупреждение о том, что база данных не найдена. Это актуально для случаев, если вы не знаете, существует БД или нет. 

Пример использования опции IF EXISTS в составе команды для удаления:

Управляйте PostgreSQL со SLA 99,7%
Управляйте PostgreSQL со SLA 99,7%
Создавайте и масштабируйте кластер базы данных, увеличивая vCPU, RAM за пару кликов при росте нагрузки
Подробнее

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

Опция WITH (FORCE)

С версии PostgreSQL 13 в составе DROP DATABASE можно использовать опцию WITH (FORCE), которая позволяет принудительно завершать активные подключения к базе и сразу после ее удалять. Это экономит время администратора, ведь без расширения ему приходится вручную искать и останавливать сессии. 

Пример команды с опцией:

Полная форма:

Перед использованием опции WITH (FORCE) проверьте свою версию PostgreSQL. Если она ниже 13, команда завершится с ошибкой. В этом случае используйте классический подход с ручной остановкой активных подключений.

Альтернативные методы удаления

Помимо команды DROP DATABASE есть и другие способы удаления базы данных PostgreSQL: через графический интерфейс PgAdmin и утилиту dropdb.

Удаление в PgAdmin

PgAdmin — графический интерфейс для удобного администрирования PostgreSQL. Он предоставляет все необходимые инструменты для управления кластерами, базами данных и пользователями. Как удалить БД с его помощью без SQL-команды:

  1. В pgAdmin найдите раздел Servers.

  2. Подключитесь к нужному серверу. 

  3. Разверните список Databases.

  4. Выделите базу данных, которую хотите удалить. 

  5. В контекстном меню выберите Delete/Drop.

  6. Подтвердите действие, нажав кнопку OK или Yes

Перед удалением таким способом выполните те же этапы подготовки, что и при использовании DROP DATABASE — сделайте резервные копии, проверьте и завершите активные подключения. 

Использование утилиты командной строки dropdb

dropdb — консольная утилита PostgreSQL для удаления баз данных. Она запускается из командной строки и подключается к серверу СУБД. Пример использования утилиты:

Чтобы избежать ошибки при удалении несуществующей базы данных используйте опцию --if-exists:

Утилита поддерживает все базовые параметры подключения: хост, порт и имя базы данных. Можно указать так:

Если у вас PostgreSQL 13 и выше, с помощью dropdb можно принудительно удалять базу данных с предварительным автоматическим завершением активных подключений. Используйте опцию --force, которая соответствует WITH (FORCE) в команде DROP DATABASE:

Примеры удаления базы данных

Для удобства мы собрали типичные сценарии удаления в одну таблицу, которой можно пользоваться как шпаргалкой: 

Сценарий
Пример команды
Зачем выполнять
Удаление существующей базы
sql DROP DATABASE mydb;
Базовая команда для удаления конкретной БД
Удаление после проверки существования БД
sql DROP DATABASE IF EXISTS mydb;
Команда, которая перед удалением позволяет проверить, что база данных действительно существует
Удаление с принудительным завершением активных подключений
sql DROP DATABASE mydb WITH (FORCE);
Команда, которая перед удалением обнаруживает и разрывает все активные подключения к БД
Удаление с помощью утилиты командной строки
bash dropdb mydb
Способ, который удаляет базу данных также, как с помощью команды DROP DATABASE. Удобен для удаленных действий с БД.
Удаление БД после ручного завершения активных подключений
1. SELECT pid FROM pg_stat_activity WHERE datname = 'mydb';
2. SELECT pg_terminate_backend(pid);
3. DROP DATABASE mydb;
Последовательность действий, которые позволяют сначала самостоятельно завершить активные сессии, затем удалить БД

Рекомендации и практики

Про создание резервных копий и остановку текущих подключений мы уже говорили. Еще несколько рекомендаций, которые позволят снизить риски ошибок и некорректных действий при удалении БД: 

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

  • Не удаляйте базу, к которой подключены. Подключитесь к другой БД и через нее выполните команду для удаления. Это предотвратит попытку ликвидировать текущую рабочую базу. 

  • Документируйте процесс удаления. Фиксируйте в журналах, кто, почему и когда выполнял DROP. И уведомите других членов команды о таких действиях, чтобы не нарушить текущие рабочие процессы. 

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

Если работаете с инструментами автоматизации, которые могут инициировать случайное удаление базы данных, используйте механизмы подтверждения действий. Например, это может быть ввод имени БД.

Заключение

Удаление базы данных с использованием DROP DATABASE — необратимый процесс, который требует осознанного подхода. Перед выполнением команды убедитесь в существовании удаляемых БД, сделайте резервные копии, остановите подключения и проверьте, есть ли зависимости среди сервисов и приложений. 

Продукты из этой статьи:
Иконка-Evolution Managed PostgreSQL®
Evolution Managed PostgreSQL®
4 мая 2026

Нужна помощь с облаком?

Свяжитесь с нашим специалистом
*
*
+7
*
*
*
0/300

Вам может понравиться