Больше не нужно искать работу мечты — присоединяйтесь к команде Клауда

Как установить PostgreSQL из исходного кода

Рашид Алимов
Рашид Алимов
Технический писатель
23 сентября 2024 г.
94
12 минут чтения
Средний рейтинг статьи: 5

PostgreSQL — это объектно-реляционная система управления базами данных (ОРСУБД), которая поддерживает значительную часть стандарта SQL и предлагает множество современных возможностей.

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

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

Создание и подготовка сервера

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

Создание облачного сервера

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

  1. Переходим на страницу авторизации и входим в аккаунт, используя логин или адрес электронной почты и пароль, либо через Pass, ВКонтакте, GitHub, Google.

  2. После успешной авторизации открывается панель управления текущего проекта. Переходим в раздел «Облачные серверы» и нажимаем «Создать» или «Добавить».

  3. Выбираем операционную систему для установки на сервер. В нашем случае это будет Ubuntu версии 22.04.

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

Image4

  1. Конфигурацию сервера необходимо выбирать исходя из требований вашего проекта. Для демонстрационных целей выберем сервер с 1 ядром, 1 Гб ОЗУ и диском объемом 15 Гб. 
  2. Для установки и работы базы данных нам потребуется публичный IPv4-адрес. Также, при необходимости вы можете добавить сервер в приватную сеть.

Image5

  1. Для повышения безопасности и надежности данных можно подключить резервные копии и защиту от DDoS-атак (последняя доступна только в Санкт-Петербурге и Москве).

Image2

  1. Также можно заранее загрузить SSH-ключ, чтобы не входить на сервер с помощью пароля. Подробности можно найти в статье «Авторизация по SSH-ключу». Ключ добавляется только для root-пользователя.
  2. Выберите проект, в котором будет располагаться сервер, и придумайте имя.
  3. Нажмите «Заказать» для создания сервера. Если на вашем аккаунте недостаточно средств, появится предупреждение о необходимости пополнить баланс. После оплаты и создания сервера откроется главная страница сервера, где можно будет найти IP-адрес и реквизиты root-пользователя для подключения.

Обновление системы и установка необходимых пакетов

Авторизуемся на сервере по SSH по реквизитам из панели управления и приступаем к установке.

В первую очередь обновите систему и установите требуемые пакеты:

sudo apt update -y
sudo apt upgrade -y
cloud

Установка PostgreSQL

PostgreSQL поддерживает множество UNIX-подобных платформ. СУБД можно установить как на большинство дистрибутивов Linux, так и на Windows и MacOS.

Во время установки используйте пользователя с правами sudo. Не рекомендуется производить установку через root-пользователя.

Загрузка исходного кода

На официальном сайте необходимо выбрать желаемую версию. Чтобы установить СУБД PostgeSQL 16.4, переходим в терминал и вводим:

wget https://ftp.postgresql.org/pub/source/v16.4/postgresql-16.4.tar.gz

Далее проверяем архив с исходниками с помощью md5sum, чтобы убедиться в подлинности файла. Она должна совпадать с хэш-суммой на сайте.

md5sum postgresql-16.4.tar.gz
6849302e68ba1984cee67cd6eab2b930  postgresql-16.4.tar.gz

Распаковываем архив утилитой tar и переходим в директорию. 

tar -xzvf postgresql-16.4.tar.gz
cd postgresql-16.4

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

Установка PostgreSQL из исходников требует установки зависимостей. 

sudo apt install -y gcc make pkg-config libreadline-dev zlib1g-dev icu-devtools libicu-dev

Переходим к конфигурированию базы данных.

./configure --prefix=/usr/local/lib/postgresql/16/ --libdir=/usr/local/lib/postgresql/16/lib/

Здесь --prefix отвечает за путь, где хранится каталог, а --libdir — за место хранения библиотек и модулей.

Также можно задать следующие параметры:

  • --prefix=PREFIX: Задает основной каталог для установки всех файлов. По умолчанию это /usr/local/pgsql, но вы можете изменить его на любое другое место. Важно отметить, что файлы будут установлены в соответствующие подкаталоги, а не напрямую в каталог, указанный в PREFIX.

  • --exec-prefix=EXEC-PREFIX: Определяет каталог для установки файлов, зависящих от архитектуры (например, исполняемых файлов и библиотек). Это может быть полезно, если вам нужно разделить файлы, зависящие от архитектуры, и независимые файлы, чтобы использовать их на разных хостах. Если этот параметр не указан, он автоматически принимает значение, указанное в --prefix.

  • --bindir=DIRECTORY: Указывает каталог, в который будут установлены исполняемые файлы, такие как psql и initdb. По умолчанию это EXEC-PREFIX/bin, что обычно означает /usr/local/pgsql/bin.

  • --sysconfdir=DIRECTORY: Определяет каталог для хранения конфигурационных файлов, таких как postgresql.conf. По умолчанию это PREFIX/etc.

  • --libdir=DIRECTORY: Задает каталог для установки библиотек и динамически загружаемых модулей. По умолчанию используется EXEC-PREFIX/lib.

  • --includedir=DIRECTORY: Указывает каталог для установки файлов заголовков C и C++. По умолчанию это PREFIX/include.

  • --datarootdir=DIRECTORY: Устанавливает корневой каталог для различных типов файлов, доступных только для чтения, например, документации и данных для локализации. По умолчанию это PREFIX/share.

  • --datadir=DIRECTORY: Указывает каталог для установки файлов, доступных только для чтения, которые используются установленными программами. Это не влияет на местоположение ваших файлов базы данных. По умолчанию используется DATAROOTDIR.

  • --localedir=DIRECTORY: Определяет каталог для установки данных локализации, таких как файлы перевода сообщений. По умолчанию это DATAROOTDIR/locale.

  • --mandir=DIRECTORY: Указывает каталог для установки man-страниц, связанных с PostgreSQL. По умолчанию это DATAROOTDIR/man.

  • --docdir=DIRECTORY: Указывает корневой каталог для установки файлов документации (за исключением man-страниц). По умолчанию используется DATAROOTDIR/doc/postgresql.

  • --htmldir=DIRECTORY: Задает каталог для установки HTML-документации для PostgreSQL. По умолчанию используется DATAROOTDIR.

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

Чтобы начать сборку PostgreSQL, выполните одну из следующих команд:

sudo make
sudo make all

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

Если вы хотите собрать не только основную часть системы, но и всю возможную документацию (включая HTML и man-страницы), а также дополнительные модули (contrib), используйте команду:

 make world

Если вам нужно собрать все, включая дополнительные модули (contrib), но без документации, воспользуйтесь командой:

make world-bin

Выбрать нужный вариант сборки необходимо исходя из требования проекта. В статье будем использовать установку make world.

Проверим, что сборка проекта произошла без ошибок.

make check

Чтобы запустить установку PostgreSQL версии world, введите:

make install-world

Если для сборки вы использовали только стандартную часть системы, введите команду:

make install
make install-docs
make install-world-bin

Создание кластера

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

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

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

sudo useradd postgres -d /var/local/lib/postgresql/ -s /bin/bash

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

sudo mkdir -p /var/local/lib/postgresql/16/main/
sudo chown -R postgres:postgres /var/local/lib/postgresql/

После этого переключимся на пользователя postgres:

sudo su - postgres

Теперь добавим необходимые переменные окружения для пользователя postgres, применим изменения и проверим их:

echo "export PGDATA=/var/local/lib/postgresql/16/main/" >> .bash_profile
echo "PATH=/usr/local/lib/postgresql/16/bin/:$PATH" >> .bash_profile
. .bash_profile
ls -ld $PGDATA
drwxr-sr-x 2 postgres postgres 4096 Aug 19 18:20 /var/local/lib/postgresql/16/main/
whereis psql
psql: /usr/local/lib/postgresql/16/bin/psql

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

initdb

Image3

Обратите внимание, что по умолчанию генерируется кластер с английской локалью en_US.UTF-8. Чтобы база данных использовала по умолчанию русскую локализацию, необходимо перед инициализацией кластера настроить локаль.

Установите локаль ru_RU.UTF-8 в системе. Вы можете добавить её, используя команду locale-gen или эквивалентные команды, в зависимости от вашей операционной системы.

sudo locale-gen ru_RU.UTF-8
sudo update-locale

Теперь перед инициализацией кластера указываем:

export LC_CTYPE=ru_RU.UTF-8

Запуск и остановка кластера

Для управления кластером баз данных PostgreSQL используется утилита pg_ctl. Эта команда позволяет запускать, останавливать кластер, а также проверять его текущее состояние. Утилита pg_ctl опирается на переменную окружения PGDATA, которая указывает на каталог, где находится кластер. Также с помощью опции -l <файл> можно указать файл журнала, в который будут записываться сообщения о работе сервера.

Чтобы запустить кластер и записать журнал в файл postgres.log, выполните команду:

pg_ctl -l postgres.log start
waiting for server to start.... done
server started

Учтите, что только пользователи postgres или root имеют право запускать и останавливать кластер.

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

pg_ctl status
pg_ctl: server is running (PID: 13519)
/usr/local/lib/postgresql/16/bin/postgres

Чтобы выполнить тестовый запрос к базе данных, выполните следующую команду:

psql -c 'SELECT now()'
              now
-------------------------------
 2024-08-19 18:47:32.003335+03
(1 row)

Для остановки сервера выполните:

pg_ctl stop

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

После завершения работы вернитесь к своему обычному пользователю, выполнив:

exit

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

Создание службы systemd для кластера PostgreSQL

Настройка службы для основного кластера

Чтобы управлять кластером PostgreSQL с помощью systemd, нам нужно создать специальную службу. Для этого сначала разлогинимся из пользователя postgres, на которого мы переключились ранее

exit

Теперь создадим файл службы для основного кластера PostgreSQL:

sudo nano /etc/systemd/system/postgresql.service

В файл добавляем следующую конфигурацию:

[Unit]
Description=PostgreSQL database server
Documentation=man:postgres(1)
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
User=postgres
ExecStart=/usr/local/lib/postgresql/16/bin/pg_ctl -D /var/local/lib/postgresql/16/main/ -l /var/local/lib/postgresql/16/main/postgres-main.log start
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT

[Install]
WantedBy=multi-user.target

Примените изменения и запустите службу:

sudo systemctl daemon-reload
sudo systemctl start postgresql.service

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

Проверьте статус службы:

systemctl status postgresql.service

Вывод команды может выглядеть следующим образом:

Image1

Включение службы в автозагрузку

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

sudo systemctl enable postgresql.service

Теперь служба будет автоматически запускаться при каждом перезапуске сервера. Если вам потребуется отменить автозагрузку службы, используйте:

sudo systemctl disable postgresql.service

Этот процесс позволяет вам организовать управление кластером PostgreSQL через systemd, обеспечивая его автоматический запуск и управление на сервере.

Установите PostgreSQL из исходников<br/>на сервере Timeweb Cloud

Заключение

В статье мы подробно рассмотрели процесс установки PostgreSQL из исходного кода, начиная с подготовки необходимых зависимостей и конфигурации сборки до настройки и запуска службы systemd. Мы изучили, как использовать различные параметры конфигурации, чтобы настроить расположение файлов и директории для различных компонентов PostgreSQL, включая библиотеки, заголовочные файлы и файлы данных. Эти навыки могут быть использованы для создания более сложных и оптимизированных решений на основе PostgreSQL, соответствующих требованиям конкретных проектов или организаций.

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
23 сентября 2024 г.
94
12 минут чтения
Средний рейтинг статьи: 5
Пока нет комментариев