# Занятие 01: Базовый инструментарий / Установка и управление сервером

> Исходная страница в нативном Markdown: Базовый инструментарий / Установка и управление сервером

---

Индекс LLMS: [llms.txt](/ru/llms.txt)

---

<!-- Generated by scripts/generate_skeleton.py. -->

> [!NOTE]
> Эта страница извлечена из официального PDF в нативный Markdown. Текст слайдов, код и комментарии сохранены в порядке чтения; исходные PDF и HTML остаются эталоном макета.
> **HTML source:** [dba1_01_tools_install.html](https://edu.postgrespro.ru/16/dba1-16/dba1_01_tools_install.html)
> **Archive:** [DBA1-handouts-16.zip](https://edu.postgrespro.ru/16/DBA1-handouts-16.zip)
> **Страниц PDF:** 23

## Page 1: Базовый инструментарий / Установка и управление сервером {#source-page-001}

### Авторские права

© Postgres Professional, 2017–2024 Авторы: Егор Рогов, Павел Лузанов, Илья Баштанов, Алексей Береснев Фото: Олег Бартунов (монастырь Пху и пик Бхрикути, Непал)
### Использование материалов курса

Некоммерческое использование материалов курса (презентации, демонстрации) разрешается без ограничений. Коммерческое использование возможно только с письменного разрешения компании Postgres Professional. Запрещается внесение изменений в материалы курса.
### Обратная связь

Отзывы, замечания и предложения направляйте по адресу: edu@postgrespro.ru
### Отказ от ответственности

Компания Postgres Professional не несет никакой ответственности за любые повреждения и убытки, включая потерю дохода, нанесенные прямым или непрямым, специальным или случайным использованием материалов курса. Компания Postgres Professional не предоставляет каких-либо гарантий на материалы курса. Материалы курса предоставляются на основе принципа «как есть» и компания Postgres Professional не обязана предоставлять сопровождение, поддержку, обновления, расширения и изменения.

## Page 2: Темы занятия {#source-page-002}

**Основные понятия**
- Установка из исходных кодов
- Управление сервером
- Пакетная установка
- Управление сервером в Ubuntu
- Облачные решения

## Page 3: Кластер БД и сервер {#source-page-003}

![Source slide page 3: Кластер БД и сервер](images/page-003.png){#source-figure-003 caption="Source slide page 3: Кластер БД и сервер"}


### Комментарии преподавателя

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

PostgreSQL — программа, которая относится к классу систем управления базами данных.

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

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

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

## Page 4: Исходные коды {#source-page-004}

**Установка из исходных кодов**
  - стабильная версия сервера
  - можно использовать нестандартные параметры
  - или собрать на специфичной архитектуре
- Установка из репозитория git
  - текущая версия сервера
  - необходимо в первую очередь для разработчиков ядра;
  - требует более широкого набора инструментов

### Комментарии преподавателя

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

По адресу <https://www.postgresql.org/ftp/source> доступен исходный код в двух вариантах: gzip и bzip2. В виртуальной машине необходимый файл уже находится в домашнем каталоге пользователя student.

Исходные коды можно взять и непосредственно из git-репозитория проекта: git://git.postgresql.org/git/postgresql.git (проект имеет зеркала, в том числе на github).

В этом случае можно собрать не только стабильную версию, но и версию на любой конкретный коммит, в том числе наиболее актуальную.

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

## Page 5: Необходимое ПО {#source-page-005}

**Обязательно**
  - tar, gzip/bzip2, GNU make, компилятор Си (C89)
- Используются, но можно отключить
  - библиотеки GNU Readline, zlib, lz4, zstd
- Дополнительно
  - языки программирования Perl, Python, Tcl
  - для использования PL/Perl, PL/Python, PL/Tcl
  - Kerberos, OpenSSL, OpenLDAP, PAM
  - для аутентификации и шифрования
  - библиотека ICU для кроссплатформенной поддержки UNICODE
- Отдельные инструменты при сборке из репозитория git

### Комментарии преподавателя

Сборка и установка традиционно основывается на GNU Make и Autoconf:

<https://postgrespro.ru/docs/postgresql/16/install-make>

В этом курсе рассматривается традиционный способ сборки.

Начиная с версии 16 можно также использовать систему сборки программного обеспечения Meson:

<https://postgrespro.ru/docs/postgresql/16/install-meson>

Для сборки требуется ряд программ и утилит.

Библиотека readline дает возможность редактировать командную строку, пользоваться историей команд и автодополнением. В серверной инсталляции может быть и не нужна, если не предполагается запускать psql в консоли.

Библиотеки zlib, lz4 и zstd используются для сжатия.

## Page 6: Распаковка архива {#source-page-006}

Архив с исходными кодами находится в домашнем каталоге пользователя student. Распаковываем архив:
```sh
student$ cd
```
```sh
student$ tar xzf /home/student/postgresql-16.0.tar.gz
```
```sh
student$ ls -l /home/student/postgresql-16.0
```
```text
total 876
-rw-r--r--  1 student student    365 сен 11  2023 aclocal.m4
drwxrwxr-x  2 student student   4096 сен 11  2023 config
-rwxr-xr-x  1 student student 584200 сен 11  2023 configure
-rw-r--r--  1 student student  87156 сен 11  2023 configure.ac
drwxrwxr-x 61 student student   4096 сен 11  2023 contrib
-rw-r--r--  1 student student   1192 сен 11  2023 COPYRIGHT
drwxrwxr-x  3 student student   4096 сен 11  2023 doc
-rw-r--r--  1 student student   4288 сен 11  2023 GNUmakefile.in
-rw-r--r--  1 student student    277 сен 11  2023 HISTORY
-rw-r--r--  1 student student  64592 сен 11  2023 INSTALL
-rw-r--r--  1 student student   1875 сен 11  2023 Makefile
-rw-r--r--  1 student student 101920 сен 11  2023 meson.build
-rw-r--r--  1 student student   6266 сен 11  2023 meson_options.txt
-rw-r--r--  1 student student   1213 сен 11  2023 README
drwxrwxr-x 16 student student   4096 сен 11  2023 src
```
### Создание конфигурации
Настройку сборки выполним в каталоге с распакованным исходным кодом, используя скрипт configure.
```sh
student$ cd /home/student/postgresql-16.0
```
> [!NOTE]
> **Внимание!**
> Если сборка производится повторно, например с другими параметрами конфигурации, то предварительно нужно убрать файлы, оставшиеся от предыдущей сборки:
```sh
student$ make distclean
```
В команде configure можно указать различные параметры конфигурации. Например:
--prefix — каталог установки, по умолчанию /usr/local/pgsql; --enable-debug — для включения отладочной информации.
Полный список параметров есть в документации.
Также принимаются во внимание переменные окружения. Например, CC и CFLAGS настраивают компилятор C.
Скрипт configure по умолчанию подготавливает сборку и установку исполняемых файлов, библиотек и прочих файлов PostgreSQL в каталог /usr/local/pgsql. Обычно каталог установки доступен для записи только суперпользователю ОС.
В целях демонстрации ключом --prefix укажем каталог установки ПО сервера в подкаталог pgsql16 домашнего каталога пользователя student. Кроме того, будем использовать порт 5555 вместо порта 5432 по умолчанию:
```sh
student$ ./configure --prefix=/home/student/pgsql16 --with-pgport=5555
```
Вывод этой и следующих команд занимает очень много места, мы не будем его показывать.
### Сборка и установка PostgreSQL
Возможные варианты:
make — сборка только сервера; make world — сборка сервера, всех расширений и документации.
Собираем сервер. В зависимости от характеристик компьютера команда make может работать достаточно долго (минуты и даже десятки минут).
```sh
student$ make
```
Теперь устанавливаем сервер.
```sh
student$ make install
```
Для сборки расширений нужно повторить make и make install в подкаталоге contrib.

## Page 7: Page 7 {#source-page-007}

```sh
student$ cd contrib
```
```sh
student$ make
```
```sh
student$ make install
```
Если бы мы собирали сервер с расширениями и документацией (make world), то можно было бы установить все вместе командой make install-world.

## Page 8: Создание кластера {#source-page-008}

![Source slide page 8: Создание кластера](images/page-008.png){#source-figure-008 caption="Source slide page 8: Создание кластера"}

**Утилита**
  - initdb
- Особенности
  - новый кластер баз данных не может принадлежать
  - суперпользователю ОС
  - PGDATA — удобная переменная для каталога кластера
  - файлы конфигурации создаются в каталоге PGDATA
  - желательно включить расчет контрольных сумм
  - для страниц с данными

### Комментарии преподавателя

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

В целях безопасности каталог, в котором инициализируется кластер, не может принадлежать суперпользователю ОС. Владельцем кластера обычно делают пользователя postgres.

Владелец кластера может определить переменную окружения PGDATA, указывающую на каталог кластера. Эту переменную используют некоторые утилиты сервера, когда им нужно узнать расположение кластера. К таким утилитам относится initdb, а также основная утилита управления сервером pg\_ctl, о которой мы будем говорить дальше.

В процессе инициализации кластера утилита initdb создает конфигурационные файлы в этом же каталоге PGDATA. Подробнее о файлах конфигурации мы расскажем в одной из следующих тем.

Утилита initdb имеет множество ключей, влияющих на ее работу. Один из важных — -k, или --data-checksums — включает подсчет контрольных сумм на страницах данных. Проверка контрольной суммы будет выполняться при обращении к любой странице данных в кластере. Это несколько снижает производительность, но позволяет оперативно обнаружить повреждения в данных.

<https://postgrespro.ru/docs/postgresql/16/app-initdb>

## Page 9: Создание кластера {#source-page-009}

Теперь необходимо создать каталог для данных. Для промышленного использования владельцем каталога обычно назначают отдельного пользователя ОС. В нашем случае, пусть это будет каталог пользователя student внутри /home/student/pgsql16
```sh
student$ mkdir /home/student/pgsql16/data
```
Этот каталог часто называют PGDATA по имени переменной окружения, которую удобно использовать при работе с утилитами сервера.
```sh
student$ export PGDATA=/home/student/pgsql16/data
```
Все утилиты сервера установлены в подкаталоге bin, который стоит добавить в переменную PATH:
```sh
student$ export PATH=/home/student/pgsql16/bin:$PATH
```
Для инициализации кластера баз данных используется утилита initdb.
В ключе -U можно указать имя суперпользователя СУБД. Если его не задать, то используется имя пользователя ОС, в нашем случае student. Обычно таким пользователем является postgres, так что зададим это имя явно. Ключ -k включает подсчет контрольных сумм страниц, что позволяет своевременно обнаруживать повреждения данных. Если переменная PGDATA не установлена, то в ключе -D следует указать каталог для данных. В нашем случае этот ключ можно было бы не указывать.
```sh
student$ initdb -U postgres -k -D /home/student/pgsql16/data
```

## Page 10: Управление сервером {#source-page-010}

**Утилита**
  - pg\_ctl
- Основные задачи
  - запуск, останов и получение статуса сервера
  - обновление параметров конфигурации
  - переключение на реплику

### Комментарии преподавателя

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

Для выполнения этих действий предназначена утилита pg\_ctl, идущая в составе PostgreSQL.

Запускать pg\_ctl следует от имени владельца кластера баз данных.

Более подробная информация об управлении сервером для администраторов баз данных:

<https://postgrespro.ru/docs/postgresql/16/app-pg-ctl>

<https://postgrespro.ru/docs/postgresql/16/runtime>

## Page 11: Управление сервером {#source-page-011}

Теперь все готово к запуску сервера.
В ключе -l укажем файл журнала сообщений сервера. Ключ -D опускаем, поскольку задана переменная PGDATA.
```sh
student$ pg_ctl start -l /home/student/logfile
```
Для проверки работы можно вызвать утилиту psql, которая подключится к серверу и вернет текущее время:
```sh
student$ psql -U postgres -p 5555 -c 'SELECT now();'
```
```text
              now
-------------------------------
 2026-04-10 17:02:06.104584+03
(1 row)
```
Для останова сервера используется следующая команда:
```sh
student$ pg_ctl stop
```

## Page 12: Установка пакета {#source-page-012}

![Source slide page 12: Установка пакета](images/page-012.png){#source-figure-012 caption="Source slide page 12: Установка пакета"}

**Готовые пакеты — предпочтительный способ**
- Linux ( , Debian, Red Hat, SUSE и другие)
  - входит в дистрибутив ОС
  - репозиторий (yum, apt) или пакеты RPM, DEB
- FreeBSD, OpenBSD
  - пакеты из Ports and Packages Collection
- Mac OS X
- Windows

### Комментарии преподавателя

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

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

В пакетные репозитории некоторых систем уже входит PostgreSQL, но, обычно, не самой последней версии. Актуальная версия может быть взята из репозитория PostgreSQL Global Development Group (PGDG):

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

Мы рассмотрим особенности пакета PostgreSQL для Ubuntu.

## Page 13: Создание кластера {#source-page-013}

![Source slide page 13: Создание кластера](images/page-013.png){#source-figure-013 caption="Source slide page 13: Создание кластера"}

**Утилита**
  - pg\_createcluster
  - initdb
- Особенности
  - инициализация выполняется при установке пакета
  - и создает кластер «main»
  - подсчет контрольных сумм по умолчанию не включен
  - расположение файлов конфигурации и журнала сервера
  - автоматический запуск сервера при старте ОС

### Комментарии преподавателя

Для инициализации кластера в Ubuntu создана обертка pg\_createcluster над утилитой initdb.

Справку по использованию pg\_createcluster можно получить командой: $ man pg\_createcluster

Утилита pg\_createcluster автоматически запускается при установке пакета и создает кластер баз данных с именем «main».

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

Исполняемые файлы, файлы конфигурации и журнал сервера размещены в соответствии с правилами, принятыми в Ubuntu.

Кроме того, настраивается автоматический запуск и останов сервера PostgreSQL при запуске и останове операционной системы.

Для удаления кластера используется утилита pg\_dropcluster.

Утилиты pg\_createcluster и pg\_dropcluster специфичны для Ubuntu. В других системах нужно явно инициализировать кластер с помощью initdb и задействовать подходящие средства операционной системы.

## Page 14: Создание кластера в Ubuntu {#source-page-014}

В виртуальной машине курса PostgreSQL установлен из пакета командой:
```sh
student$ sudo apt install -y postgresql-16
```
Каталог установки PostgreSQL:
```sh
student$ sudo ls -l /usr/lib/postgresql/16
```
```text
total 8
drwxr-xr-x 2 root root 4096 ноя 25 17:25 bin
drwxr-xr-x 4 root root 4096 ноя 25 17:25 lib
```
Владелец ПО сервера — пользователь root.
Утилита pg\_config показывает, с какими параметрами был собран сервер:
```sh
student$ sudo /usr/lib/postgresql/16/bin/pg_config --configure
```
```text
 '--build=x86_64-linux-gnu' '--prefix=/usr' '--includedir=${prefix}/include'
'--mandir=${prefix}/share/man' '--infodir=${prefix}/share/info' '--sysconfdir=/etc'
'--localstatedir=/var' '--disable-option-checking' '--disable-silent-rules'
'--libdir=${prefix}/lib/x86_64-linux-gnu' '--runstatedir=/run'
'--disable-maintainer-mode' '--disable-dependency-tracking' '--with-tcl' '--with-perl'
'--with-python' '--with-pam' '--with-openssl' '--with-libxml' '--with-libxslt'
'--mandir=/usr/share/postgresql/16/man' '--docdir=/usr/share/doc/postgresql-doc-16'
'--sysconfdir=/etc/postgresql-common' '--datarootdir=/usr/share/'
'--datadir=/usr/share/postgresql/16' '--bindir=/usr/lib/postgresql/16/bin'
'--libdir=/usr/lib/x86_64-linux-gnu/' '--libexecdir=/usr/lib/postgresql/'
'--includedir=/usr/include/postgresql/' '--with-extra-version= (Ubuntu
16.11-1.pgdg24.04+1)' '--enable-nls' '--enable-thread-safety' '--enable-debug'
'--disable-rpath' '--with-uuid=e2fs' '--with-gnu-ld' '--with-gssapi' '--with-ldap'
'--with-pgport=5432' '--with-system-tzdata=/usr/share/zoneinfo' 'AWK=mawk'
'MKDIR_P=/bin/mkdir -p' 'PROVE=/usr/bin/prove' 'PYTHON=/usr/bin/python3' 'TAR=/bin/tar'
'XSLTPROC=xsltproc --nonet' 'CFLAGS=-g -O2 -fno-omit-frame-pointer
-mno-omit-leaf-frame-pointer -flto=auto -ffat-lto-objects -fstack-protector-strong
-fstack-clash-protection -Wformat -Werror=format-security -fcf-protection
-fno-omit-frame-pointer' 'LDFLAGS=-Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects
-Wl,-z,relro -Wl,-z,now' '--enable-tap-tests' '--with-icu' '--with-llvm'
'LLVM_CONFIG=/usr/bin/llvm-config-19' 'CLANG=/usr/bin/clang-19' '--with-lz4'
'--with-zstd' '--with-systemd' '--with-selinux' '--enable-dtrace'
'build_alias=x86_64-linux-gnu' 'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=3' 'CXXFLAGS=-g
-O2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -flto=auto -ffat-lto-objects
-fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security
-fcf-protection'
```
Кластер баз данных с именем main уже инициализирован и находится в каталоге /var/lib/postgresql/16/main.
Владельцем каталога является пользователь postgres. Вот содержимое каталога:
```sh
student$ sudo ls -l /var/lib/postgresql/16/main
```
```text
total 92
drwx------ 1 postgres postgres 4096 ноя 25 18:06 base
drwx------ 1 postgres postgres 4096 апр 10 17:02 global
drwx------ 2 postgres postgres 4096 ноя 25 18:06 pg_commit_ts
drwx------ 2 postgres postgres 4096 ноя 25 18:06 pg_dynshmem
drwx------ 4 postgres postgres 4096 ноя 25 18:06 pg_logical
drwx------ 4 postgres postgres 4096 ноя 25 18:06 pg_multixact
drwx------ 2 postgres postgres 4096 ноя 25 18:06 pg_notify
drwx------ 2 postgres postgres 4096 ноя 25 18:06 pg_replslot
drwx------ 2 postgres postgres 4096 ноя 25 18:06 pg_serial
drwx------ 2 postgres postgres 4096 ноя 25 18:06 pg_snapshots
drwx------ 1 postgres postgres 4096 апр 10 17:01 pg_stat
drwx------ 2 postgres postgres 4096 ноя 25 18:06 pg_stat_tmp
drwx------ 2 postgres postgres 4096 ноя 25 18:06 pg_subtrans
drwx------ 2 postgres postgres 4096 ноя 25 18:06 pg_tblspc
drwx------ 2 postgres postgres 4096 ноя 25 18:06 pg_twophase
-rw------- 1 postgres postgres    3 ноя 25 18:06 PG_VERSION
drwx------ 3 postgres postgres 4096 ноя 25 18:06 pg_wal
drwx------ 2 postgres postgres 4096 ноя 25 18:06 pg_xact
-rw------- 1 postgres postgres   88 ноя 25 18:06 postgresql.auto.conf
-rw------- 1 postgres postgres  130 апр 10 17:01 postmaster.opts
-rw------- 1 postgres postgres  109 апр 10 17:01 postmaster.pid
```

## Page 15: Page 15 {#source-page-015}


## Page 16: Управление сервером {#source-page-016}

**Утилита**
  - pg\_ctlcluster
  - pg\_ctl
- Основные задачи
  - запуск, останов и получение статуса сервера
  - перечитывание параметров конфигурации
  - переключение на реплику

### Комментарии преподавателя

В пакетном дистрибутиве для Ubuntu доступ к утилите pg\_ctl осуществляется не напрямую, а через специальную обертку pg\_ctlcluster. Справку по использованию pg\_ctlcluster можно получить командой: $ man pg\_ctlcluster

В других системах утилита pg\_ctl может использоваться непосредственно.

## Page 17: Управление сервером в Ubuntu {#source-page-017}

При установке из пакета в настройки запуска ОС добавляется запуск PostgreSQL. Поэтому после загрузки операционной системы отдельно стартовать PostgreSQL не нужно.
Можно явным образом управлять сервером с помощью утилиты pg\_ctlcluster, которая запускается либо от имени пользователя ОС postgres, либо через sudo.
Утилита pg\_ctlcluster позволяет управлять несколькими серверами разных версий. В качестве параметров ей передаются:
16 — номер версии сервера; main — название сервера; команда
Остановить сервер:
```sh
student$ sudo pg_ctlcluster 16 main stop
```
```sh
student$ pg_lsclusters 16 main
```
```text
Ver Cluster Port Status Owner    Data directory              Log file
16  main    5432 down   postgres /var/lib/postgresql/16/main
/var/log/postgresql/postgresql-16-main.log
```
Запустить сервер:
```sh
student$ sudo pg_ctlcluster 16 main start
```
Перезапустить:
```sh
student$ sudo pg_ctlcluster 16 main restart
```
Получить текущий статус сервера:
```sh
student$ sudo pg_ctlcluster 16 main status
```
```text
pg_ctl: server is running (PID: 58989)
/usr/lib/postgresql/16/bin/postgres "-D" "/var/lib/postgresql/16/main" "-c"
"config_file=/etc/postgresql/16/main/postgresql.conf"
```
Перечитать файлы конфигурации:
```sh
student$ sudo pg_ctlcluster 16 main reload
```
Журнал сообщений сервера при пакетной установке находится здесь:
```sh
student$ ls -l /var/log/postgresql/postgresql-16-main.log
```
```text
-rw-r----- 1 postgres adm 46002 апр 10 17:02 /var/log/postgresql/postgresql-16-main.log
```
Заглянем в конец журнала:
```sh
student$ tail -n 10 /var/log/postgresql/postgresql-16-main.log
```
```text
2026-04-10 17:02:10.646 MSK [58935] LOG:  shutting down
2026-04-10 17:02:10.650 MSK [58935] LOG:  checkpoint starting: shutdown immediate
2026-04-10 17:02:10.676 MSK [58935] LOG:  checkpoint complete: wrote 3 buffers (0.0%); 0
WAL file(s) added, 0 removed, 0 recycled; write=0.008 s, sync=0.005 s, total=0.030 s;
sync files=2, longest=0.003 s, average=0.003 s; distance=0 kB, estimate=0 kB;
lsn=0/1922118, redo lsn=0/1922118
2026-04-10 17:02:10.683 MSK [58934] LOG:  database system is shut down
2026-04-10 17:02:10.891 MSK [58989] LOG:  starting PostgreSQL 16.11 (Ubuntu
16.11-1.pgdg24.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu
13.3.0-6ubuntu2~24.04) 13.3.0, 64-bit
2026-04-10 17:02:10.891 MSK [58989] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2026-04-10 17:02:10.894 MSK [58989] LOG:  listening on Unix socket
"/var/run/postgresql/.s.PGSQL.5432"
2026-04-10 17:02:10.906 MSK [58992] LOG:  database system was shut down at 2026-04-10
17:02:10 MSK
2026-04-10 17:02:10.917 MSK [58989] LOG:  database system is ready to accept connections
2026-04-10 17:02:13.344 MSK [58989] LOG:  received SIGHUP, reloading configuration files
```

## Page 18: Облачные решения {#source-page-018}

**PostgreSQL в виртуальной среде**
  - накладные расходы на виртуализацию
  - администратор имеет полный доступ к экземпляру
- PostgreSQL as a Service
  - предлагается многими облачными провайдерами
  - основное администрирование берет на себя провайдер
  - доступ только к ограниченным инструментам для управления,
  - резервного копирования, мониторинга

### Комментарии преподавателя

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

Кроме того, многие ведущие зарубежные и российские облачные провайдеры предлагают использовать PostgreSQL как сервис (Database as a Service, managed database).

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

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

## Page 19: Итоги {#source-page-019}

**Два варианта установки — пакеты или исходный код**
- Доступны облачные решения
- Сервер выполняется под выделенным пользователем ОС
- Перед использованием сервера необходимо инициализировать кластер баз данных
- Специальные команды для управления сервером

## Page 20: Практика {#source-page-020}

Включение расчета контрольных сумм в кластере.
- 1. Остановите сервер.
- 2. Проверьте, рассчитываются ли контрольные суммы в кластере.
- 3. Включите расчет контрольных сумм.
- 4. Запустите сервер.

### Комментарии преподавателя

2, 3. Используйте утилиту pg\_checksums. Для ее запуска укажите полный путь: /usr/lib/postgresql/16/bin/pg\_checksums

<https://postgrespro.ru/docs/postgresql/16/app-pgchecksums>

## Page 21: 1. Останов сервера {#source-page-021}

```sh
student$ sudo pg_ctlcluster 16 main stop
```
### 2. Проверка
Чтобы узнать, включен ли расчет контрольных сумм страниц, запустим утилиту pg\_checksums с ключом --check:
```sh
student$ sudo /usr/lib/postgresql/16/bin/pg_checksums --check -D /var/lib/postgresql/16/main
```
```text
pg_checksums: error: data checksums are not enabled in cluster
```
### 3. Включение расчета контрольных сумм
Выполняем pg\_checksums с ключом --enable:
```sh
student$ sudo /usr/lib/postgresql/16/bin/pg_checksums --enable -D /var/lib/postgresql/16/main
```
```text
Checksum operation completed
Files scanned:   1244
Blocks scanned:  3749
Files written:  1026
Blocks written: 3749
pg_checksums: syncing data directory
pg_checksums: updating control file
Checksums enabled in cluster
```
Расчет контрольных сумм включен.
### 4. Запуск сервера
```sh
student$ sudo pg_ctlcluster 16 main start
```

## Page 22: Практика+ {#source-page-022}

1. Установите PostgreSQL из исходных кодов так, как это показано в демонстрации.
  - Создайте кластер баз данных, запустите сервер.
  - Убедитесь, что сервер работает.
  - Остановите сервер.

## Page 23: 1. Сборка PostgreSQL из исходных кодов {#source-page-023}

Все необходимые команды были показаны в демонстрации, но они не выполнялись. Повторите эти действия своими руками в виртуальной машине курса.
Имейте в виду, что компиляция исходных кодов может занимать продолжительное время (от нескольких минут до десятков минут в зависимости от мощности компьютера).
