Основы реляционных баз данных
2026-02-26 18:58 Diff

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

Эту проблему можно решить с помощью конструкции sudo -u postgres psql, которую используют в терминале при подключении PostgreSQL. Но это не лучшее решение, по таким причинам:

  • У пользователя postgres есть максимальные права в СУБД. Если завладеть ими, можно все уничтожить. Поэтому приложения или пользователи никогда не создают базы данных от имени postgres и никогда не работают из-под этого пользователя

  • Придется постоянно использовать эту конструкцию sudo -u postgres для любых команд, которые связаны с СУБД. Если у вас MacOS, часть sudo -u postgres использовать не нужно. После установки PostgreSQL автоматически конфигурируется для работы с вашим пользователем

В этом уроке разберем, как создать пользователя и базу данных в СУБД, чтобы psql не выдавал ошибку и все данные были в безопасности. Так мы подготовим PostgreSQL к работе.

Создание пользователя в СУБД

Чтобы упростить работу по ходу курса, создадим роль с таким же именем, как и пользователь, из-под которого вы работаете. Выполните следующие действия:

  1. Посмотрите имя вашего текущего пользователя:

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

Теперь у нас есть роль в СУБД. Попробуем с ее помощью соединиться с PostgreSQL:

Снова ошибка. Теперь psql «ругается», что не выбрана база данных. Невозможно соединиться с СУБД, если не указать конкретную базу данных. Ее можно указать самостоятельно — передать один аргумент в psql.

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

Соединение удалось. Теперь посмотрим список ролей. Для этого подходит команда \du (Describe Users), которую нужно выполнить внутри REPL:

В СУБД создалось две роли: postgres и которую самостоятельно добавили ранее. Теперь создадим базу данных.

Создание базы данных в СУБД

Для экспериментов нам понадобится база данных и, возможно, даже не одна. Создадим базу с именем hexlet. Сделать это можно из командной строки командой createdb:

Имя для базы данных выбирается произвольно и обычно совпадает с названием проекта, для которого она создается. Имена баз уникальны в рамках одной СУБД. Это значит, что повторный вызов createdb с тем же именем приведет к ошибке.

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

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

Созданную базу данных можно удалить командой dropdb:

Если удалили, не забудьте ее снова создать, так как она понадобится нам в дальнейшем.

Запускать команду dropdb нужно с осторожностью. Удаление базы данных — необратимый процесс, так как базы невозможно восстановить без резервных копий. Чтобы избежать проблем: команда dropdb не работает без аргументов — ей всегда нужно передавать имя базы.

Удалить базу данных можно только в том случае, если к ней никто не подключен — за исключением того, кто удаляет. Если есть другие клиенты, например psql или pgadmin4, то СУБД предупредит о невозможности выполнить команду.

Выводы

В этом уроке мы разобрали, как создать пользователя и базу данных в СУБД. Теперь psql не будет выдавать ошибку и все данные будут в безопасности. Так мы подготовили PostgreSQL к работе.