DB_class_34

Шаблон
0

Описание

Занятие 34. Установка сервера PostgreSQL

Шаблон

Используйте репозиторий как шаблон для создания нового репозитория

Языки

  • HTML100%
README.md

Занятие 34. Установка сервера PostgreSQL

На данном занятии мы с вами изучим процесс установки сервера PostgreSQL.

План занятия

  1. Введение
  2. Основные понятия
  3. Способы установки сервера
  4. Установка с помощью пакетного менеджера
  5. Установка из исходных файлов
  6. Практическая часть

Введение

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

Расписание занятия:

  1. Изучение теории (45 минут)
  2. Отдых (10 минут)
  3. Выполнение практической части (30 минут)

Основные понятия

Прежде чем переходить к основной теме, рассмотрим некоторые основные понятия.

PostgreSQL — программа, которая относится к классу систем управления базами данных. Когда эта программа выполняется, мы называем ее сервером PostgreSQL или экземпляром сервера. Пока сервер представляется для нас «черным ящиком», но постепенно мы познакомимся с тем, как он устроен.

Данные, которыми управляет PostgreSQL, хранятся в базах данных. Один экземпляр PostgreSQL одновременно работает с несколькими базами данных. Этот набор баз данных называется кластером баз данных. Подробнее мы будем говорить о базах данных в теме «Организация данных. Базы данных и схемы».

Итак: кластер баз данных — это набор из нескольких баз данных; сервер или экземпляр сервера — программа, управляющая кластером баз данных. Запомнили. Приступаем к изучению темы занятия.


Способы установки сервера

Если на рабочей машине нет сервера, то его необходимо установить.

Существует несколько способов установки сервера PostgreSQL:

  1. С помощью пакетного менеджера (самый простой)
  2. Сборка из исходных файлов (сложнее)
  3. Сборка из репозитория (Hard level)

Если быть кратким, то самый простой и очевидный способ что-либо установить в linux - это использование пакетного менеджера (apt или yum). При выборе такого способа менеджер сам произведет все необходимые операции для установки и запуска сервера.

Особенности такого подхода:

  • Легко управлять несколькими версиями с помощью одной утилиты.
  • Вероятность отсутствия установщика в репозиториях ОС.
  • Практически полное отсутствие возможности задания настроек при установке.
  • Установка только стабильных версий.

Отсюда ясно, что не для всех дистрибутивов Linux есть необходимые версии PostgreSQL, поэтому такой вариант подходит не всегда.

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

Сборка из репозитория является непростой задачей и такой способ чаще используют, если необходимо внести изменения в само ядро PostgreSQl. Этот вариант нас интересовать не будет.

Исходные коды можно взять и непосредственно из git-репозитория проекта:

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

При установке из репозитория git требуется более широкий набор инструментов. Например, лексический и синтаксический анализатор сделан с помощью Flex и Bison, и в git хранятся именно исходные коды для этих инструментов. При сборке из них генерируются файлы на Си, которые затем компилируются. При этом в архиве с исходными кодами находятся уже сгенерированные файлы Си.


Установка с помощью пакетного менеджера

В данном случае понадобится лишь ввести несколько команд:

  1. Обновляем репозиторий с помощью команды
  1. Скачиваем и устанавливаем PostgreSQL

Автоматически скачается, установится и запускается последняя стабильная версия (LTS).

Теперь на компьютере дополнительно будет создан пользователь postgres, который будет являться суперпользователем в нашем кластере баз данных. Для первого подключения будем использовать именно его.

По умолчанию все конфигурационные файлы находятся по пути /etc/postgresql/17/main. Где 17 - это версия PostgreSQL, которую вы установили, поэтому будьте внимательны и выбирайте свою версию.

Сам кластер по умолчанию хранятся в каталоге /var/lib/postgresql/17/main/base/OID. Где OID - уникальный идентификатор базы данных.

На этом пока не стоит акцентировать свое внимание, нам редко когда понадобится данная директория.

Управление сервером

Для управления сервером используется утилита pg_ctlcluster, поставляемая вместе с сервером PostgreSQL. Она является надстройкой над pg_ctl и позволяет управлять несколькими версиями серверов. С pg_ctl мы ознакомимся позже.

Для запуска сервера используется команда start

Где:

  • <версия> - версия сервера баз данных, которую вы установили
  • <сервер> - название сервера (по умолчанию main)

Для остановки сервера используется команда stop

Чтобы посмотреть текущий статус сервера используется команда status


Установка из исходных кодов

Исходный код - это код приложения на языке программирования. То есть мы скачиваем наш PostgreSQL в виде кода на языке Си.
Отсюда и появляется возможность изменения кода ядра.

Сперва стоит поговорить о требованиях и зависимостях, без которых установка не выйдет, а именно:

Обязательные

  • tar и gzip для распаковки архивов (скорее всего установлены из коробки).
  • GNU make для создания сборки из исходного кода (скорее всего есть).
  • GCC Для компиляции кода на языке Си (скорее всего есть).

Используются, но можно отключить

  • GNU Readline для удобной работы в интерактивном режиме (Вероятно придется устанавливать, можно отключить).
  • zlib, lz4, zstd для сжатия баз данных (Вероятно уже установлены).
  • ICU для корректной работы с юникодом. (Скорее всего придется устанавливать)

Установка

Для начала необходимо выбрать версию, которую мы хотим установить. Все доступные версии можно найти на официальном сайте PostgreSQL.

Переходите в интересующий каталог и ищите файлы вроде postgresql-17.0.tar.gz, копируйте ссылку и с помощью команды wget скачивайте архив.

Распакуйте архив в помощью команды

Перейдите в полученную папку и произведите сборку конфигурации с которой будет работать наш будущий сервер. Есть множество параметров, которые можно редактировать. Полный список можно посмотреть тут

Нас устроят параметры по умолчанию, поэтому просто выполняем команду сборки конфигурации

Здесь у вас могут появиться ошибки, если вы не установили дополнительные библиотеки, если хотите продолжить без них, то можно указать специальные префиксы, например

После того как мы собрали нашу конфигурацию, необходимо скомпилировать нашу сборку, для этого выполняем команду

Это займет какое-то время.

А затем устанавливаем сервер PostgreSQL

Далее нужно установить все расширения, для этого переходим в каталог contrib и выполняем то же самое:

А затем

После создания сервера необходимо инициализировать кластер баз данных. Для этих целей есть утилита initdb.

Обычно для промышленного использования владельцем каталога назначают отдельного пользователя ОС, в нашем случае это будет student.
Давайте создадим директорию для данных нашего кластера

Теперь добавим нашего пользователя с правами суперпользователя

И назначим его владельцем созданной нами директории

Далее будем выполнять команды от этого пользователя

Для удобства дальнейшей работы предлагаю создать локальную переменную окружения, ссылающуюся на данную директорию, чтобы в будущем было проще писать команды

После выполнения установки сервера все библиотеки, исполнительные файлы по умолчанию устанавливаются в директорию /usr/local/pgsql
Поэтому, чтобы пользоваться утилитами сборки (в том числе initdb) необходимо добавить этот путь в переменную PATH

Учтите, что даннная процедура добавления пути в переменную PATH работает только до перезагрузки текущей сессии терминала.

Теперь мы можем воспользоваться утилитой initdb и инициализировать кластер

Отлично, теперь у нас есть рабочий сервер баз данных.

Управление сервером

К управлению сервером относятся такие операции как запуск, остановка, обновление конфигурации, переключение на реплику и некоторые другие.

Для всех этих операций используется еще одна утилита, поставляемая вместе с PostgreSQL - pg_ctl
Пользоваться ей можно лишь от лица владельца кластера данных.

  1. Запуск кластера

Для запуска используется команда

Где:

  • -l путь к файлу куда будут записываться логи работы сервера
  • -d путь к папке с данными кластера баз данных. Если задана переменная PGDATA, то можно опустить
  1. Подключение к серверу

Для подключения к серверу буз данных (не только на локальном компьютере) используется утилита psql. Чтобы подключить к базе данных развернутого нами серверу баз данных

Где:

  • -h адрес хоста, на котором находится сервер баз данных
  • -p порт, на котором работает база данных (по умолчанию 5432)
  • -U пользователь, под которым происходит подключение
  • -d база данных, к которой происходит подключение
  1. Остановка сервера

Чтобы остановить сервер используется команда stop

Практическая часть

Для получения оценки вы можете выбрать один из 3 вариантов задания.
Каждое из них будет соответствовать оценке, которую вы получить в случае успешного выполнения.

У вас все получится!

Варианты заданий

На оценку 3

  1. Установить сервер PostgreSQL с помощью пакетного менеджера.
  2. Создать базу данных "lesson_34".
  3. Остановить работу сервера.

На оценку 4

  1. Установить сервер PostgreSQL из исходных файлов.
  2. Создать базу данных "Lesson_34".
  3. Остановить работу сервера.

На оценку 5

  1. Установить сервер PostgreSQL 17 с ICU и Readline.
    Конфигурационные файлы PostgreSQL 17 расположить в директории /ect/postgresql/17/main.
    Кластер баз данных расположить в директории /home/student/pgsql17/data.
    Логи сохранять в файл /home/student/pgsql17.
  2. Создать базу данных "Lesson_34".
  3. Остановить работу сервера.
  4. Ответить на вопросы.

Вопросы:

  1. Можно ли установить сервер но не создавать кластер?
  2. Когда стоит выбрать установку из исходных файлов?
  3. Куда по умолчанию устанавливается сервер баз данных при пакетной установке?
  4. Какие этапы мы проходим при установке сервера из исходников?
  5. Как запустить и остановить сервер баз данных?
  6. Как инициализировать кластер?
  7. Какие утилиты, идущие вместе с сервером PostgreSQL вы запомнили?
  8. Необходимо наличие нескольких версий PostgreSQL на одной машине. Можно ли это сделать? Если можно, то как?
  9. «Начали устанавливать - посыпались ошибки». Что будете делать?
  10. «Не получается войти в базу данных от пользователя student. Почему?». Какие есть идеи?
  11. «Создал локальную переменную PGDATA. Перезагружаю сеанс, а она пропала.» В чем может быть причина?
  12. Какие параметры нужно знать, чтобы подключить к любому серверу баз данных?
  13. Что хранит файл postgresql.conf?
  14. В чем отличие postgresql.conf от postgresql.auto.conf?
  15. «Изменил параметр work_mem. Смотрю конфигурацию pg_settings, а там не изменилось значение». Какие есть идеи?