Установка PostgreSQL на Debian 12
PostgreSQL — это мощная объектно-реляционная система управления базами данных с открытым исходным кодом. Она использует и расширяет язык SQL, а также имеет множество функций для безопасного хранения и масштабирования самых сложных нагрузок данных.
В этом руководстве я покажу, как установить СУБД PоstgreSQL на операционной системе Debian 12. Установку будем выполнять из исходников и в качестве примера, рассмотрим установку 16 версии PоstgreSQL.
Официальный FTP — https://ftp.postgresql.org/pub/source
Установка зависимостей
Устанавливаем необходимые пакеты зависимостей:
apt-get install gcc make libreadline-dev zlib1g-dev libicu-dev libbison-dev flex git -y
Загрузка исходного кода
Клонируем репозиторий PostgreSQL с GitHub:
cd /opt
git clone https://github.com/postgres/postgres.git postgres
Переходим в клонированный репозиторий.
cd postgres
Выбор версии
По умолчанию мы находимся в ветке — master
, но для того чтобы установить желаемую версию, сперва нужно посмотреть какие доступны ветки версий, а затем уже переключится на нужную.
Посмотреть все ветки в репозитории можно командой:
git branch -a | grep -E '^[* ]*(remotes/origin/)?REL' | awk -F/ '{print $NF}'
В случае если необходимо выполнить сборку какой то определенной версии, то сперва можно вывести список доступных релизов:
git tag | grep -E '^REL'
Переключаемся на нужную ветку или конкретный релиз (в моем случае я буду устанавливать 16-тый стабильный релиз):
git checkout REL_16_STABLE
Переменные окружения
Добавим переменную окружения, с указанием устанавливаемой версии PostgreSQL, для того чтобы было удобнее выполнять настройку после установки (в моем случае я указываю 16):
export PSQL_VERSION=16
Сборка
Выполняем настройку, которая проверит вашу систему на наличие зависимостей и соответствующим образом настроит сборку
./configure \
--prefix=/usr \
--datadir=/var/lib/postgresql/$PSQL_VERSION/data \
--bindir=/usr/lib/postgresql/$PSQL_VERSION/bin \
--libdir=/usr/lib/postgresql/$PSQL_VERSION/lib
Пояснения:
--datadir=/var/lib/postgresql/../data
→ файлы базы будут храниться здесь--bindir=/usr/lib/postgresql/../bin
→ бинарники (postgres
,pg_ctl
…) здесь--libdir=/usr/lib/postgresql/../lib
→ библиотеки здесь
Компиляция и установка
Собираем с использованием всех ядер и после устанавливаем:
make -j$(nproc)
make install
Создание пользователя postgres
Добавляем системного пользователя postgres — все операции с СУБД будут выполняться под этой учетной записью. Устанавливаем для этой учетной записи пустой пароль, чтобы заблокировать вход для обычных пользователей, но с возможностью входа через root
или аккаунты с sudo
правами.
useradd postgres -d /var/lib/postgresql -s /bin/bash -c "PostgreSQL administrator"
Назначаем соответствующие права доступа на домашний каталог пользователя postgres, где так же будет располагаться каталог основного кластера баз данных:
chown -R postgres:postgres /var/lib/postgresql/
chmod 700 /var/lib/postgresql/$PSQL_VERSION/data
Настраиваем переменные окружения для PostgreSQL:
sudo sh -c "echo 'export PGDATA=/var/lib/postgresql/$PSQL_VERSION/main/' > /etc/profile.d/postgres.sh"
sudo sh -c "echo 'PATH=/usr/lib/postgresql/$PSQL_VERSION/bin/:$PATH' >> /etc/profile.d/postgres.sh"
source /etc/profile.d/postgres.sh
/etc/profile.d/postgres.sh
автоматически загружается при входе пользователей, обеспечивая глобальную доступность настроек.Создание кластера
Кластером баз данных в PostgreSQL считается совокупность баз данных, которые физически расположены в каком-нибудь каталоге.
Кодировка
При инициализации кластера нужно учитывать, что кодировка кластера задается при инициализации и не может быть изменена после создания кластера. По умолчанию при инициализации кластера используется локаль используемая в системе по умолчанию.
Посмотреть текущую локаль в системе можно командой:
locale | grep -E 'LC_CTYPE|LC_COLLATE'
LC_CTYPE="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
К примеру если у вас локаль по умолчанию en_US.UTF-8
, а вам нужно инициализировать кластер с локалью ru_RU.UTF-8
, то сперва ее нужно добавить в систему командой — dpkg-reconfigure locales
и затем уже можно ее использовать при инициализации кластера.
Инициализация кластера
Инициализируем кластер от пользователя postgres
:
su - postgres -c "initdb"
Для инициализации кластера с указанной локалью, используем команду:
su - postgres -c "initdb --locale=ru_RU.UTF-8 -E UTF8"
-U
и -W
чтобы задать суперпользователя и пароль сразу при инициализации базы данных. По умолчанию используется имя пользователя ОС, под которым выполняется команда.Успешный вывод:
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "ru_RU.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "russian".
Data page checksums are disabled.
creating directory /var/lib/postgresql/16/main ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Europe/Moscow
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
initdb: warning: enabling "trust" authentication for local connections
initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
pg_ctl -D /var/lib/postgresql/16/main/ -l logfile start
Дополнительный кластер
Сервер PostgreSQL может обслуживать несколько кластеров, для инициализации дополнительного кластера, инициализация выполняется с ключом -D
и указанием каталога данных:
su - postgres -c "initdb -D /var/lib/postgresql/$PSQL_VERSION/another_cluster"
Где:
/var/lib/postgresql/../another_cluster
— каталог данных (может быть любым).
Так же в файле конфигурации дополнительного кластера /var/lib/postgresql/../another_cluster/postgresql.conf
необходимо указать номер порта отличный от уже используемого кластера.
Создание службы
Создаем файл службы systemd
для PostgreSQL:
cat << EOF > /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/lib/postgresql/$PSQL_VERSION/bin/pg_ctl -D /var/lib/postgresql/$PSQL_VERSION/main/ -l /var/lib/postgresql/$PSQL_VERSION/main/postgres-main.log start
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT
[Install]
WantedBy=multi-user.target
EOF
Перезагружаем конфигурацию systemd, включаем автозапуск и запускаем службу:
systemctl daemon-reload
systemctl enable postgresql
systemctl start postgresql
Установка расширений
Расширения в PostgreSQL — это модули, добавляющие новую функциональность к серверу баз данных, такие как дополнительные типы данных, функции и операторы. Некоторые расширения входят в стандартную поставку PostgreSQL и могут быть установлены из каталога contrib
находящийся в каталоге с исходниками.
Например, установим расширение tablefunc
, которое добавляет функции для работы с табличными данными.
cd contrib/tablefunc/
Выполним сборку и установку:
make
make install
Активируем расширение в базе данных:
su - postgres -c "psql -d postgres -c \"CREATE EXTENSION tablefunc;\""
Проверим, что расширение установилось:
su - postgres -c "psql -d postgres -c \"SELECT name, comment FROM pg_available_extensions;\""
Вывод должен содержать строку:
name | comment
-----------+------------------------------------------------------------
tablefunc | functions that manipulate whole tables, including crosstab
plpgsql | PL/pgSQL procedural language
(2 rows)
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ
Обсуждение
Нет комментариев.