HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Если PostgreSQL запустить без аргументов, то она пытается подключиться к локальной базе данных, которая находится на той же машине. При этом программа подключается с именем, которое совпадает с именем текущего пользователя. Делает она это с помощью роли с этим же именем. Если PostgreSQL установили верно, то запуск в Linux, например, Ubuntu, негативно реагирует на отсутствие соответствующей роли:</p>
1 <p>Если PostgreSQL запустить без аргументов, то она пытается подключиться к локальной базе данных, которая находится на той же машине. При этом программа подключается с именем, которое совпадает с именем текущего пользователя. Делает она это с помощью роли с этим же именем. Если PostgreSQL установили верно, то запуск в Linux, например, Ubuntu, негативно реагирует на отсутствие соответствующей роли:</p>
2 <p>Эту проблему можно решить с помощью конструкции sudo -u postgres psql, которую используют в терминале при подключении PostgreSQL. Но это не лучшее решение, по таким причинам:</p>
2 <p>Эту проблему можно решить с помощью конструкции sudo -u postgres psql, которую используют в терминале при подключении PostgreSQL. Но это не лучшее решение, по таким причинам:</p>
3 <ul><li><p>У пользователя<em>postgres</em>есть максимальные права в СУБД. Если завладеть ими, можно все уничтожить. Поэтому приложения или пользователи никогда не создают базы данных от имени<em>postgres</em>и никогда не работают из-под этого пользователя</p>
3 <ul><li><p>У пользователя<em>postgres</em>есть максимальные права в СУБД. Если завладеть ими, можно все уничтожить. Поэтому приложения или пользователи никогда не создают базы данных от имени<em>postgres</em>и никогда не работают из-под этого пользователя</p>
4 </li>
4 </li>
5 <li><p>Придется постоянно использовать эту конструкцию sudo -u postgres для любых команд, которые связаны с СУБД. Если у вас MacOS, часть sudo -u postgres использовать не нужно. После установки PostgreSQL автоматически конфигурируется для работы с вашим пользователем</p>
5 <li><p>Придется постоянно использовать эту конструкцию sudo -u postgres для любых команд, которые связаны с СУБД. Если у вас MacOS, часть sudo -u postgres использовать не нужно. После установки PostgreSQL автоматически конфигурируется для работы с вашим пользователем</p>
6 </li>
6 </li>
7 </ul><p>В этом уроке разберем, как создать пользователя и базу данных в СУБД, чтобы psql не выдавал ошибку и все данные были в безопасности. Так мы подготовим PostgreSQL к работе.</p>
7 </ul><p>В этом уроке разберем, как создать пользователя и базу данных в СУБД, чтобы psql не выдавал ошибку и все данные были в безопасности. Так мы подготовим PostgreSQL к работе.</p>
8 <h2>Создание пользователя в СУБД</h2>
8 <h2>Создание пользователя в СУБД</h2>
9 <p>Чтобы упростить работу по ходу курса, создадим роль с таким же именем, как и пользователь, из-под которого вы работаете. Выполните следующие действия:</p>
9 <p>Чтобы упростить работу по ходу курса, создадим роль с таким же именем, как и пользователь, из-под которого вы работаете. Выполните следующие действия:</p>
10 <ol><li><p>Посмотрите имя вашего текущего пользователя:</p>
10 <ol><li><p>Посмотрите имя вашего текущего пользователя:</p>
11 </li>
11 </li>
12 <li><p>Создайте роль с таким же именем внутри PostgreSQL с помощью команды createuser. Ее нужно запускать от пользователя postgres, иначе она попробует соединиться с СУБД от имени текущего пользователя, которого там нет:</p>
12 <li><p>Создайте роль с таким же именем внутри PostgreSQL с помощью команды createuser. Ее нужно запускать от пользователя postgres, иначе она попробует соединиться с СУБД от имени текущего пользователя, которого там нет:</p>
13 </li>
13 </li>
14 </ol><p>Теперь у нас есть роль в СУБД. Попробуем с ее помощью соединиться с PostgreSQL:</p>
14 </ol><p>Теперь у нас есть роль в СУБД. Попробуем с ее помощью соединиться с PostgreSQL:</p>
15 <p>Снова ошибка. Теперь psql "ругается", что не выбрана база данных. Невозможно соединиться с СУБД, если не указать конкретную базу данных. Ее можно указать самостоятельно - передать один аргумент в psql.</p>
15 <p>Снова ошибка. Теперь psql "ругается", что не выбрана база данных. Невозможно соединиться с СУБД, если не указать конкретную базу данных. Ее можно указать самостоятельно - передать один аргумент в psql.</p>
16 <p>Мы уже знаем, что внутри PostgreSQL создана база<em>postgres</em>. Попробуем подключиться к ней:</p>
16 <p>Мы уже знаем, что внутри PostgreSQL создана база<em>postgres</em>. Попробуем подключиться к ней:</p>
17 <p>Соединение удалось. Теперь посмотрим список ролей. Для этого подходит команда \du (Describe Users), которую нужно выполнить внутри REPL:</p>
17 <p>Соединение удалось. Теперь посмотрим список ролей. Для этого подходит команда \du (Describe Users), которую нужно выполнить внутри REPL:</p>
18 <p>В СУБД создалось две роли:<em>postgres</em>и которую самостоятельно добавили ранее. Теперь создадим базу данных.</p>
18 <p>В СУБД создалось две роли:<em>postgres</em>и которую самостоятельно добавили ранее. Теперь создадим базу данных.</p>
19 <h2>Создание базы данных в СУБД</h2>
19 <h2>Создание базы данных в СУБД</h2>
20 <p>Для экспериментов нам понадобится база данных и, возможно, даже не одна. Создадим базу с именем<em>hexlet</em>. Сделать это можно из командной строки командой createdb:</p>
20 <p>Для экспериментов нам понадобится база данных и, возможно, даже не одна. Создадим базу с именем<em>hexlet</em>. Сделать это можно из командной строки командой createdb:</p>
21 <p>Имя для базы данных выбирается произвольно и обычно совпадает с названием проекта, для которого она создается. Имена баз уникальны в рамках одной СУБД. Это значит, что повторный вызов createdb с тем же именем приведет к ошибке.</p>
21 <p>Имя для базы данных выбирается произвольно и обычно совпадает с названием проекта, для которого она создается. Имена баз уникальны в рамках одной СУБД. Это значит, что повторный вызов createdb с тем же именем приведет к ошибке.</p>
22 <p>После установки PostgreSQL создает несколько служебных баз данных, которые нужны для работы самой СУБД. Посмотрим их список:</p>
22 <p>После установки PostgreSQL создает несколько служебных баз данных, которые нужны для работы самой СУБД. Посмотрим их список:</p>
23 <p>Теперь у нас есть роль и база данных для экспериментов. Подключимся к этой базе данных:</p>
23 <p>Теперь у нас есть роль и база данных для экспериментов. Подключимся к этой базе данных:</p>
24 <p>Созданную базу данных можно удалить командой dropdb:</p>
24 <p>Созданную базу данных можно удалить командой dropdb:</p>
25 <p>Если удалили, не забудьте ее снова создать, так как она понадобится нам в дальнейшем.</p>
25 <p>Если удалили, не забудьте ее снова создать, так как она понадобится нам в дальнейшем.</p>
26 <p>Запускать команду dropdb нужно с осторожностью. Удаление базы данных - необратимый процесс, так как базы невозможно восстановить без резервных копий. Чтобы избежать проблем: команда dropdb не работает без аргументов - ей всегда нужно передавать имя базы.</p>
26 <p>Запускать команду dropdb нужно с осторожностью. Удаление базы данных - необратимый процесс, так как базы невозможно восстановить без резервных копий. Чтобы избежать проблем: команда dropdb не работает без аргументов - ей всегда нужно передавать имя базы.</p>
27 <p>Удалить базу данных можно только в том случае, если к ней никто не подключен - за исключением того, кто удаляет. Если есть другие клиенты, например<em>psql</em>или<em>pgadmin4</em>, то СУБД предупредит о невозможности выполнить команду.</p>
27 <p>Удалить базу данных можно только в том случае, если к ней никто не подключен - за исключением того, кто удаляет. Если есть другие клиенты, например<em>psql</em>или<em>pgadmin4</em>, то СУБД предупредит о невозможности выполнить команду.</p>
28 <h2>Выводы</h2>
28 <h2>Выводы</h2>
29 <p>В этом уроке мы разобрали, как создать пользователя и базу данных в СУБД. Теперь psql не будет выдавать ошибку и все данные будут в безопасности. Так мы подготовили PostgreSQL к работе.</p>
29 <p>В этом уроке мы разобрали, как создать пользователя и базу данных в СУБД. Теперь psql не будет выдавать ошибку и все данные будут в безопасности. Так мы подготовили PostgreSQL к работе.</p>