Основы реляционных баз данных

Установка

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

Установка

Основных способа установки два:

Через скачивание установщика с сайта.

https://www.postgresql.org/download/

В разделе "Binary packages" выберите ссылку, на которой написано имя вашей операционной системы. Перейдите по ней и скачайте установщик. Далее запустите его и выполните указанные инструкции.

Если вы счастливый обладатель Windows, то убедитесь что запуск инсталлятора происходит от администратора. К тому же, вам нужно настроить Windows определенным образом, а именно включить подсистему Ubuntu или поставить vagrant. Подробнее здесь https://guides.hexlet.io/

Если вы уже включили WSL в Windows, установить PostgreSQL поможет инструкция PostgreSQL In Windows Subsystem for Linux (WSL)

Через пакетный менеджер вашей операционной системы (предпочтительно).

  • macos: brew install postgresql
  • ubuntu: apt install postgresql
  • windows: choco install postgresql

После установки, в большинстве операционных систем, 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

Самостоятельная работа

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

Дополнительные материалы

  1. Настройка локали
  2. Управление пользователями

<span class="translation_missing" title="translation missing: ru.web.courses.lessons.mentors.mentor_avatars">Mentor Avatars</span>

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Для полного доступа к курсу нужна профессиональная подписка

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

Получить доступ
115
курсов
892
упражнения
2241
час теории
3196
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 115 курсов, 2000+ часов теории
  • 800 практических заданий в браузере
  • 250 000 студентов

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг».

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Rambler
Логотип компании Bookmate
Логотип компании Botmother

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг».