В предыдущей статье мы рассмотрели установку PostgreSQL на Debian. Сегодня разберемся с удалением баз данных PostgreSQL.
Удалить базу данных PostgreSQL можно двумя способами — командой DROP DATABASE
или с помощью утилиты dropdb
. Между этими методами нет большой разницы. Отличается только синтаксис, плюс использование утилиты dropdb
даёт чуть больше возможностей для управления удалением.
Первый способ удалить БД PostgreSQL — использовать следующую инструкцию SQL:
DROP DATABASE <Имя базы данных>;
Команда удаляет каталог, который содержит информацию о БД и сохранённые ранее записи. DROP DATABASE
может выполнить только владелец базы данных. Если кто-то в момент исполнения команды будет использовать БД, то удаление не будет завершено.
Чтобы убедиться на практике, что DROP DATABASE
работает, создадим БД на сервере Timeweb Cloud, а затем удалим её.
Подключитесь к Postgres через терминал:
sudo -i -u postgres psql
Создайте новую БД для практики:
CREATE DATABASE example_db;
Чтобы убедиться, что новая БД успешно создана, выведите список всех баз данных:
\l
В ответ отобразится таблица, в которой перечислены все БД, доступные на сервере.
Теперь посмотрим, как в PostgreSQL выполнить удаление базы данных. Выполните запрос:
DROP DATABASE example_db;
В терминале отобразится сообщение, о том, что БД удалена. Чтобы убедиться в этом, ещё раз выведите полный список БД:
\l
В таблице не должно быть базы с именем example_db
.
Опция IF EXISTS
позволяет выполнить проверку, существует ли база данных, прежде чем её удалять. Полный синтаксис выглядит следующим образом:
DROP DATABASE IF EXISTS < Имя базы данных >;
Если база данных существует, команда удаляет её. Если БД с таким именем нет, появляется информативное уведомление, а не сообщение об ошибке.
Чтобы проверить, как работает опция IF EXISTS
, сначала создайте пример базы данных:
CREATE DATABASE timeweb_db;
Затем удалите только что созданную базу данных, используя опцию IF EXISTS
:
DROP DATABASE IF EXISTS timeweb_db;
Если база данных с таким именем существует, результат будет таким же, как при использовании DROP DATABASE
.
БД с именем timeweb_db
больше недоступна. Повторите команду удаления с опцией IF EXISTS
:
DROP DATABASE IF EXISTS timeweb_db;
В результате в терминале отобразится информативное сообщение о том, что такой сущности нет.
Напоследок выполните DROP DATABASE
без дополнительных опций:
DROP DATABASE timeweb_db;
Использование DROP DATABASE
без параметра IF EXISTS
приведёт к тому, что в терминале появится менее информативное сообщение об ошибке.
Опция WITH (FORCE)
доступна в Postgres версии 13 и выше. Она нужна для «силового» удаления базы данных, которая используется в данный момент. WITH (FORCE)
принудительно закрывает сеанс и удаляет БД.
DROP DATABASE <database name> WITH (FORCE);
dbaas
Утилита командной строки dropdb
— это просто оболочка для DROP DATABASE
. По сути, эти два метода идентичны. Однако dropdb
предлагает дополнительные возможности, которые помогают сделать удаление базы PostgreSQL более удобным и информативным.
Основной синтаксис:
dropdb <параметры соединения> <опции> <имя БД>
Флаг |
Тип |
Что делает |
-e --echo |
Опции |
Выводит в терминал все команды, которые фактически выполняются на сервере при использовании утилиты dropdb |
-f --force |
Опции |
Разрывает все текущие подключения, прежде чем удалять БД |
-i --interactive |
Опции |
Выводит просьбу подтвердить удаление БД, прежде чем стирать её |
-V --version |
Опции |
Выводит в консоль версию утилиты |
--if-exists |
Опции |
Добавляет информативности, выдавая вместо ошибки текстовое сообщение, если целевая БД не существует |
-? --help |
Опции |
Вызывает меню со справочной информацией |
-h <host> --host=<host> |
Параметры соединения |
Задаёт имя хоста, на которой работает БД |
-p <port> --port=<port> |
Параметры соединения |
Указывает номер порта, который прослушивает сервер |
-U <username> --username <username> |
Параметры соединения |
Позволяет подключиться к БД под именем указанного пользователя |
-w --no-password |
Параметры соединения |
Делает запрос пароля необязательным. Это особенно полезно при выполнении пакетных заданий и сценариев |
-W --password |
Параметры соединения |
Принудительно запрашивает пароль при выполнении каждой операции |
--maintenance-db=<database name> |
Параметры соединения |
Уточняет имя подключения к БД |
Например, у вас есть облачные базы данных. Периодически нужно удалять неиспользуемые сущности. Вы хотите, чтобы этот процесс был безопасным и понятным всем пользователям. Утилита dropdb
закрывает оба запроса.
Допустим, команда вида:
dropdb -i -e example_db
приведёт к тому, что в терминале сначала появится просьба подтвердить удаление, а после подтверждения отобразятся команды, выполненные в ходе операции.
Подготовили для вас выгодные тарифы на DBaaS
Чтобы удалить базу данных, вы должны быть её владельцем и иметь доступ к терминалу с привилегиями sudo
.
Выбор способа удаления зависит от вас. Между DROP DATABASE
и утилитой dropdb
нет принципиальной разницы. Это лишь вопрос удобства использования и тех сценариев, при которых вам нужно в PostgresSQL удалить базу данных.
Кстати, в официальном канале Timeweb Cloud собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать.