PostgreSQL — это объектно-реляционная система управления базами данных (ОРСУБД), которая поддерживает значительную часть стандарта SQL и предлагает множество современных возможностей.
Установка PostgreSQL из исходных кодов может быть полезной и даже необходимой в ряде случаев, особенно для тех, кто ищет максимальную гибкость и контроль над базой данных. В отличие от стандартной установки через пакетный менеджер, где установка происходит со стандартным набором расширений, сборка из исходников позволяет пользователю точно настроить конфигурацию сервера под свои нужды, выбрать оптимальные параметры компиляции и включить или исключить определенные расширения. Это особенно важно для серверов с высокой нагрузкой, где важна каждая деталь, влияющая на производительность и стабильность.
Преимущества установки PostgreSQL из исходников включают возможность использования последних версий и исправлений, которые могут еще не быть доступны в репозиториях. К примеру, вы можете настроить сервер таким образом, чтобы минимизировать риски, выбирая только необходимые компоненты и библиотеки. В итоге, установка из исходников предоставляет больше возможностей для оптимизации, адаптации и более глубокой интеграции PostgreSQL с другими системами.
Перед тем как установить PostgreSQL, нам необходимо выбрать конфигурацию сервера и создать его в панели управления.
После создания учетной записи можно приступить к аренде облачного сервера.
Переходим на страницу авторизации и входим в аккаунт, используя логин или адрес электронной почты и пароль, либо через Pass, ВКонтакте, GitHub, Google.
После успешной авторизации открывается панель управления текущего проекта. Переходим в раздел «Облачные серверы» и нажимаем «Создать» или «Добавить».
Выбираем операционную систему для установки на сервер. В нашем случае это будет Ubuntu версии 22.04.
Определяемся с регионом, в котором будет размещен сервер. Рекомендуется выбрать регион, находящийся ближе всего к вам.
Авторизуемся на сервере по SSH по реквизитам из панели управления и приступаем к установке.
В первую очередь обновите систему и установите требуемые пакеты:
sudo apt update -y
sudo apt upgrade -y
cloud
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
Обратите внимание, что по умолчанию генерируется кластер с английской локалью 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 и выполнять основные операции, такие как запуск, проверка состояния и остановка сервера.
Чтобы управлять кластером 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
Вывод команды может выглядеть следующим образом:
Для того чтобы служба автоматически запускалась при загрузке системы, выполните следующие команды:
sudo systemctl enable postgresql.service
Теперь служба будет автоматически запускаться при каждом перезапуске сервера. Если вам потребуется отменить автозагрузку службы, используйте:
sudo systemctl disable postgresql.service
Этот процесс позволяет вам организовать управление кластером PostgreSQL через systemd
, обеспечивая его автоматический запуск и управление на сервере.
Установите PostgreSQL из исходников<br/>на сервере Timeweb Cloud
В статье мы подробно рассмотрели процесс установки PostgreSQL из исходного кода, начиная с подготовки необходимых зависимостей и конфигурации сборки до настройки и запуска службы systemd
. Мы изучили, как использовать различные параметры конфигурации, чтобы настроить расположение файлов и директории для различных компонентов PostgreSQL, включая библиотеки, заголовочные файлы и файлы данных. Эти навыки могут быть использованы для создания более сложных и оптимизированных решений на основе PostgreSQL, соответствующих требованиям конкретных проектов или организаций.