Установка PostgreSQL

PostgreSQL – это очень популярная реляционная система управления базами данных. PostgreSQL используется многими программными продуктами. Например, NextCloud. Или же столь популярная в России 1C. В этой публикации я покажу, как выполняется установка PostgreSQL на Debian подобные ОС (Ubuntu Server 22.04) и RHEL подобные ОС (Rocky Linux 9.3).

Статья ориентирована на установку PostgreSQL из репозиториев дистрибутива Linux.

Установка PostgreSQL на Ubuntu Server 22.04

Сначала обновим метаданные репозиториев:

sduo apt update

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

sudo apt install -y postgresql postgresql-contrib

После завершения процедуры установки пакетов включим автоматический запуск сервиса, запустим его и проверим статус:

sudo systemctl enable postgresql
sudo systemctl start postgresql
sudo systemctl status postgresql
root@pg01:/home/roman# sudo systemctl enable postgresql
sudo systemctl start postgresql
sudo systemctl status postgresql
Synchronizing state of postgresql.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable postgresql
● postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: active (exited) since Fri 2024-02-23 14:23:18 UTC; 1min 27s ago
   Main PID: 31581 (code=exited, status=0/SUCCESS)
        CPU: 1ms

Feb 23 14:23:18 pg01 systemd[1]: Starting PostgreSQL RDBMS...
Feb 23 14:23:18 pg01 systemd[1]: Finished PostgreSQL RDBMS.
root@pg01:/home/roman# 

На момент подготовки публикации последняя версия PostgreSQL для Ubuntu Server 22.04 – версия 14.10.

Установка PostgreSQL на Rocky Linux 9.3

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

sudo dnf install -y postgresql-server postgresql-contrib postgresql-devel

В отличие от Ubuntu в Rocky Linux необходимо создавать кластер PostgreSQL вручную. Выполним инициализацию кластера:

sudo /usr/bin/postgresql-setup --initdb
[root@pg02 roman]# sudo /usr/bin/postgresql-setup --initdb
 * Initializing database in '/var/lib/pgsql/data'
 * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
[root@pg02 roman]#

После завершения процедуры инициализации кластера включим автоматический запуск сервиса, запустим его и проверим статус:

sudo systemctl enable postgresql
sudo systemctl start postgresql
sudo systemctl status postgresql
sudo systemctl start postgresql
sudo systemctl status postgresql
● postgresql.service - PostgreSQL database server
     Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled; preset: disabled)
     Active: active (running) since Fri 2024-02-23 21:43:28 +07; 46ms ago
    Process: 44941 ExecStartPre=/usr/libexec/postgresql-check-db-dir postgresql (code=exited, status=0/SUCCESS)
   Main PID: 44943 (postmaster)
      Tasks: 8 (limit: 23079)
     Memory: 16.5M
        CPU: 40ms
     CGroup: /system.slice/postgresql.service
             ├─44943 /usr/bin/postmaster -D /var/lib/pgsql/data
             ├─44944 "postgres: logger "
             ├─44946 "postgres: checkpointer "
             ├─44947 "postgres: background writer "
             ├─44948 "postgres: walwriter "
             ├─44949 "postgres: autovacuum launcher "
             ├─44950 "postgres: stats collector "
             └─44951 "postgres: logical replication launcher "

Feb 23 21:43:28 pg02 systemd[1]: Starting PostgreSQL database server...
Feb 23 21:43:28 pg02 postmaster[44943]: 2024-02-23 21:43:28.724 +07 [44943] LOG:  redirecting log output to logging collector process
Feb 23 21:43:28 pg02 postmaster[44943]: 2024-02-23 21:43:28.724 +07 [44943] HINT:  Future log output will appear in directory "log".
Feb 23 21:43:28 pg02 systemd[1]: Started PostgreSQL database server.
[root@pg02 roman]#

На момент подготовки публикации последняя версия PostgreSQL для Rocky Linux 9.3 – версия 13.13.1.

Просмотр статуса через pg_ctl и pg_ctlcluster

Помимо системной утилиты systemctl посмотреть статус сервера PostgreSQL можно утилитами, которые идут в поставке дистрибутива PostgreSQL. Для Ubuntu это утилита pg_ctlcluster (которая является оберткой над pg_ctl), а для Rocky Linux это утилита pg_ctl.

Ubuntu Server 22.04

Посмотреть перечень всех кластеров можно утилитой pg_lsclusters

sudo pg_lsclusters
root@pg01:/home/roman# pg_lsclusters 
Ver Cluster Port Status Owner    Data directory              Log file
14  main    5432 online postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log
root@pg01:/home/roman# 

Как видно из вывода выше – для версии 14 создан только дин кластер с именем “main”.

Попробуем посмотреть статус кластера “main” для версии 14:

sudo pg_ctlcluster 14 main status
root@pg01:/home/roman# sudo pg_ctlcluster 14 main status
pg_ctl: server is running (PID: 31563)
/usr/lib/postgresql/14/bin/postgres "-D" "/var/lib/postgresql/14/main" "-c" "config_file=/etc/postgresql/14/main/postgresql.conf"
root@pg01:/home/roman#

Rocky Linux 9.3

Просмотр статус сервера в Rocky Linux немного сложнее. Во-первых, нужно запускать утилиту pg_ctl от имени специального пользователя postgres, т.к. запуск от имени root запрещен. Во-вторых утилите pg_ctl нужно передать в качестве параметра расположение директории с данными. При установке и инициализации сервера PostgreSQL с параметрами по умолчанию команда для просмотра статуса сервера следующая:

sudo -u postgres pg_ctl status -D /var/lib/pgsql/data/
[root@pg02 roman]# sudo -u postgres pg_ctl status -D /var/lib/pgsql/data/
could not change directory to "/home/roman": Permission denied
pg_ctl: server is running (PID: 44943)
/usr/bin/postgres "-D" "/var/lib/pgsql/data"
[root@pg02 roman]#

Параметры установки сервера

Посмотреть с какими параметрами был установлен сервер можно через утилиту pg_config.

Команда для просмотра параметров установки сервера в Ubuntu Server 22.04:

sudo /usr/lib/postgresql/14/bin/pg_config --configure
root@pg01:/home/roman# /usr/lib/postgresql/14/bin/pg_config --configure
 '--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/14/man' '--docdir=/usr/share/doc/postgresql-doc-14' '--sysconfdir=/etc/postgresql-common' '--datarootdir=/usr/share/' '--datadir=/usr/share/postgresql/14' '--bindir=/usr/lib/postgresql/14/bin' '--libdir=/usr/lib/x86_64-linux-gnu/' '--libexecdir=/usr/lib/postgresql/' '--includedir=/usr/include/postgresql/' '--with-extra-version= (Ubuntu 14.10-0ubuntu0.22.04.1)' '--enable-nls' '--enable-thread-safety' '--enable-debug' '--enable-dtrace' '--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 -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer' 'LDFLAGS=-Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -flto=auto -Wl,-z,relro -Wl,-z,now' '--enable-tap-tests' '--with-icu' '--with-llvm' 'LLVM_CONFIG=/usr/bin/llvm-config-14' 'CLANG=/usr/bin/clang-14' '--with-lz4' '--with-systemd' '--with-selinux' 'build_alias=x86_64-linux-gnu' 'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2' 'CXXFLAGS=-g -O2 -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security'
root@pg01:/home/roman# 

Команда для просмотра параметров установки сервера в Rocky Linux 9.3:

sudo /bin/pg_config --configure
[root@pg02 roman]# /bin/pg_config --configure
 '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--program-prefix=' '--disable-dependency-tracking' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--disable-rpath' '--with-ldap' '--with-openssl' '--with-gssapi' '--enable-nls' '--without-readline' '--datadir=/usr/share/pgsql' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'CC=gcc' 'CFLAGS=-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -march=x86-64-v2 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' 'LDFLAGS=-Wl,-z,relro -Wl,--as-needed  -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 ' 'CXX=g++' 'CXXFLAGS=-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -march=x86-64-v2 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' 'PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig'
[root@pg02 roman]#

Подключение к серверу PostgreSQL

После установки сервера вы можете подключить к серверу через консольную утилиту psql. Утилиту необходимо запускать от имени специального пользователя postgres. Команда по подключению одинакова, как для Ubuntu Server, так и для Rocky Linux:

sudo -u postgres psq
[root@pg02 roman]# sudo -u postgres psql
could not change directory to "/home/roman": Permission denied
psql (13.13)
Type "help" for help.

postgres=#

При использовании конфигурации по умолчанию подключиться к серверу PostgreSQL можно только непосредственно с самого сервера локально. Для настройки возможности внешнего подключения необходимо выполнить первоначальную настройку сервера PostgreSQL – включить прослушивания подключения на всех адресах и скорректировать параметры pg_hba.conf. Обо всех этих шагах я написал в публикации по первоначальной настройке сервера PostgreSQL.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *