Несмотря на то, что вся практика для данного курса выполняется в нашей среде, это не отрицает необходимости уметь работать с базой локально. Более того, эффективное обучение невозможно без повторения примеров из уроков в своей среде. Поэтому, перед тем, как начать, необходимо установить PostgreSQL локально.
Основных способа установки два:
Через скачивание установщика с сайта.
https://www.postgresql.org/download/
В разделе "Binary packages" выберите ссылку, на которой написано имя вашей операционной системы. Перейдите по ней и скачайте установщик. Далее запустите его и выполните указанные инструкции.
Если вы счастливый обладатель Windows, то убедитесь что запуск инсталлятора происходит от администратора. К тому же, вам нужно настроить Windows определенным образом, а именно включить подсистему Ubuntu или поставить vagrant. Подробнее здесь https://guides.hexlet.io/ru/
Если вы уже включили WSL в Windows, установить PostgreSQL поможет инструкция PostgreSQL In Windows Subsystem for Linux (WSL)
Через пакетный менеджер вашей операционной системы (предпочтительно).
После установки, в большинстве операционных систем, PostgreSQL автоматически запускается от имени вновь созданного пользователя postgres. Этот пользователь понадобится нам дальше. Также будет создана база данных с именем postgres.
Теперь время убедиться в том, что установка прошла правильно. Посмотрите из командной строки запущен ли PostgreSQL:
ps aux | grep postgres
# Вывод может быть другим, но главное, что в выводе встречается строчка, содержащая текст bin/postgres.
postgres 3437 0.0 2.3 295008 24160 ? S 12:01 0:00 /usr/lib/postgresql/9.5/bin/postgres -D /var/lib/postgresql/9.5/main -c config_file=/etc/postgresql/9.5/main/postgresql.conf
В вашем случае вывод может отличаться, но главное увидеть эту строчку, в которой отображается запуск самой базы данных . Если база данных запущена, то дальше нужно попробовать к ней подключиться. PostgreSQL поставляется со специальной программой psql, которая представляет из себя REPL. Через него можно управлять PostgreSQL и взаимодействовать с базами данных внутри неё.
Подключение к PostgreSQL всегда выполняется от имени конкретного пользователя и к конкретной базе данных. Если не указано другого, то psql попробует подключиться от имени пользователя, запускающего psql, к базе данных с тем же именем.
В самой базе данных используется понятие Роль, а не Пользователь.
psql
psql: FATAL: role "vagrant" does not exist
Если PostgreSQL ещё не настраивался, то такой запуск выдаст ошибку, явно указывающую на отсутствие соответствующей роли. Единственная роль, которая есть в PostgreSQL сразу после установки — postgres.
Если вы работаете на маке, то подключение уже настроено для вашего текущего пользователя (при установке будет создана одноимённая роль). Но подключение с помощью команды psql также не сработает.
# В MacOS вывод будет другим, так как не существует базы данных
# с именем, которое совпадает с именем пользователя
psql
psql: FATAL: database "vagrant" does not exist
Небольшое отступление на тему аутентификации. В PostgreSQL существует множество разных способов подключения. Один из самых простых методов называется Peer Authentication: он основан на совпадении имени пользователя, который подключается к PostgreSQL, с именем роли внутри неё. А так как у нас есть пользователь postgres снаружи и роль postgres внутри, то им и воспользуемся.
# Запуск программы от имени другого пользователя (postgres)
sudo -u postgres psql
postgres=#
При таком запуске программы произойдёт подключение к базе данных postgres с ролью postgres.
В случае, если у вас MacOS, достаточно при запуске psql указать имя базы данных, к которой выполняются подключение.
# Запуск программы от имени текущего пользователя к БД postgres
psql postgres
postgres=#
Если ваш вывод совпадает с примером, то поздравляю, подключение к PostgreSQL прошло успешно!
Но войти во внутрь это ещё не всё, нужно суметь выйти. Внутри repl доступны разные управляющие команды. Все они построены по одному принципу — перед командой набирается обратный слеш \
: например, для выхода надо набрать \q
. Полный список команд доступен по команде \?
. Её запуск загружает пейджер, по которому можно перемещаться, используя стандартные комбинации текстового редактора Vim:
postgres=# \?
Informational
(options: S = show system objects, + = additional detail)
\d[S+] list tables, views, and sequences
\d[S+] NAME describe table, view, sequence, or index
\da[S] [PATTERN] list aggregates
\dA[+] [PATTERN] list access methods
\db[+] [PATTERN] list tablespaces
\dc[S+] [PATTERN] list conversions
\dC[+] [PATTERN] list casts
\dd[S] [PATTERN] show object descriptions not displayed elsewhere
\dD[S+] [PATTERN] list domains
\ddp [PATTERN] list default privileges
\dE[S+] [PATTERN] list foreign tables
\det[+] [PATTERN] list foreign tables
\des[+] [PATTERN] list foreign servers
\deu[+] [PATTERN] list user mappings
\dew[+] [PATTERN] list foreign-data wrappers
...
psql
psql: could not connect to database template1: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
Этот вывод говорит о том, что подключение не удалось, и нужно выяснять почему. В некоторых случаях такая ошибка возникает, если не запущен сервис postgresql. Тогда запустите его и выполните подключение повторно.
Ошибка psql: command not found, говорит о том, что PostgreSQL установлен неверно либо не установлен вообще.
Обратите внимание на то, что этот вывод порождается командной строкой на ввод любой несуществующей команды. Возможно даже, что это всего лишь ошибка в имени.
К сожалению, количество возможных проблем, помноженных на разные операционные системы и их версии, настолько велико, что не представляется возможным дать исчерпывающее руководство по их разрешению. Более того, даже опытный разработчик не всегда способен сразу разобраться, глядя на вывод ошибки, и ему требуется время на изучение проблемы (эксперименты и гугление). По этой причине, вопросы по установке лучше задавать сразу в нашем сообществе https://slack-ru.hexlet.io в канале #databases или #os.
Процесс установки PostgreSQL в Ubuntu
Вам ответят команда поддержки Хекслета или другие студенты.
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.
Наши выпускники работают в компаниях:
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Зарегистрируйтесь или войдите в свой аккаунт