Установка PostgreSQL 18 на Ubuntu 24.04

Буквально 3 дня назад (25 сентября 2025 года) вышла 18-ая версия PostgreSQL.

В ней выделяется несколько долгожданных и я не побоюсь сказать революционных доработок (AIO, B-tree skip scan, UUIDv7 и другие), полный пресс-релиз на русском языке можно прочитать на сайте OpenNet.

Ну а здесь мы попробуем установить новую версию на Ubuntu 24.04

Исходные данные: Ubuntu 24.04 (noble)
Задача: Установить PostgreSQL 18

Год назад я уже писал детальную статью про установку и первоначальную настройку PostgreSQL 17. В этой статья я ограничусь лишь процедурой установки 18-й версии на чистую Ubuntu 24.04 (noble)

Итак давайте пойдем по шагам (все шаги выполняем под пользователем root):

1. Устанавливаем пакет postgresql-common из репозитория дистрибутива ОС:

apt-get update
apt-get install -y postgresql-common

Вместе с пакетом postgresql-common в систему прилетит и пакет postgresql-client-common в котором будет ряд вспомогательных утилит, а многие файлы (psql, pg_basebackup, pgbench и другие) будут на самом деле ссылаться на враппер /usr/share/postgresql-common/pg_wrapper который позволяет запускать разные версии консольных утилит в зависимости от настроек.

Сейчас любая попытка запустить например psql приведет к выводу сообщения:

# psql
Warning: No existing cluster is suitable as a default target. Please see man pg_wrapper(1) how to specify one.
Error: You must install at least one postgresql-client-<version> package

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

2. Устанавливаем репозиторий apt.postgresql.org

Для автоматической установки и настройки репозиторий apt.postgresql.org нам нужно запустить готовый скрипт из пакета postgresql-common

/usr/share/postgresql-common/pgdg/apt.postgresql.org.sh

На наш запуск он задаст нам вопрос, действительно ли мы хотим установить APT репозиторий apt.postgresql.org в нашу систему. Жмем Enter и все будет установлено, см. вывод ниже:

This script will enable the PostgreSQL APT repository on apt.postgresql.org on
your system. The distribution codename used will be noble-pgdg.

Press Enter to continue, or Ctrl-C to abort.

Using keyring /usr/share/postgresql-common/pgdg/apt.postgresql.org.gpg
Writing /etc/apt/sources.list.d/pgdg.sources ...

Running apt-get update ...
Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
Hit:2 http://archive.ubuntu.com/ubuntu noble-updates InRelease                                                              
Hit:3 http://archive.ubuntu.com/ubuntu noble-backports InRelease                                                            
Get:4 https://apt.postgresql.org/pub/repos/apt noble-pgdg InRelease [107 kB]
Hit:5 http://security.ubuntu.com/ubuntu noble-security InRelease
Get:6 https://apt.postgresql.org/pub/repos/apt noble-pgdg/main amd64 Packages [347 kB]
Fetched 454 kB in 1s (661 kB/s)
Reading package lists... Done

You can now start installing packages from apt.postgresql.org.

Have a look at https://wiki.postgresql.org/wiki/Apt for more information;
most notably the FAQ at https://wiki.postgresql.org/wiki/Apt/FAQ

Скрипт помог нам не выполнять ряд рутинных действий по добавлению GPG ключа в систему, создания файла /etc/apt/sources.list.d/pgdg.sources и выполнения apt-get update

Теперь мы можем установить нужную нам версию PostgreSQL.

Как я писал в прошлогодней статье, на данном этапе мы можем сделать предварительные настройки нашего нового кластера БД, смотри пункт 3 из старой статьи про 17-ю версию. Но в данной статье мы пропустим это и будем устанавливать новый кластер PostgreSQL с базовыми настройками.

3. Установка PostgreSQL 18:

Для установки сервера нам нужно установить пакет postgresql-18. Если нам вдруг нужно установить только клиентскую часть, то ставим пакет postgresql-client-18

apt-get install -y postgresql-18

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

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  libllvm19 libpq5 liburing2 libxslt1.1 postgresql-18-jit postgresql-client-18 postgresql-client-common postgresql-common
Suggested packages:
  libpq-oauth postgresql-doc-18
The following NEW packages will be installed:
  libllvm19 liburing2 libxslt1.1 postgresql-18 postgresql-18-jit postgresql-client-18
The following packages will be upgraded:
  libpq5 postgresql-client-common postgresql-common
3 upgraded, 6 newly installed, 0 to remove and 5 not upgraded.
Need to get 48.8 MB of archives.
After this operation, 201 MB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libllvm19 amd64 1:19.1.1-1ubuntu1~24.04.2 [28.7 MB]
Get:2 https://apt.postgresql.org/pub/repos/apt noble-pgdg/main amd64 postgresql-common all 283.pgdg24.04+1 [112 kB]
Get:3 https://apt.postgresql.org/pub/repos/apt noble-pgdg/main amd64 postgresql-client-common all 283.pgdg24.04+1 [47.9 kB]
Get:4 https://apt.postgresql.org/pub/repos/apt noble-pgdg/main amd64 libpq5 amd64 18.0-1.pgdg24.04+3 [248 kB]
Get:5 https://apt.postgresql.org/pub/repos/apt noble-pgdg/main amd64 postgresql-client-18 amd64 18.0-1.pgdg24.04+3 [2,091 kB]
Get:6 https://apt.postgresql.org/pub/repos/apt noble-pgdg/main amd64 postgresql-18 amd64 18.0-1.pgdg24.04+3 [7,516 kB]
Get:7 https://apt.postgresql.org/pub/repos/apt noble-pgdg/main amd64 postgresql-18-jit amd64 18.0-1.pgdg24.04+3 [9,861 kB]
Get:8 http://archive.ubuntu.com/ubuntu noble/main amd64 liburing2 amd64 2.5-1build1 [21.1 kB]
Get:9 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libxslt1.1 amd64 1.1.39-0exp1ubuntu0.24.04.2 [167 kB]
Fetched 48.8 MB in 2s (31.5 MB/s)                                                
debconf: unable to initialize frontend: Dialog
debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 79, <STDIN> line 9.)
debconf: falling back to frontend: Readline
Preconfiguring packages ...
(Reading database ... 101187 files and directories currently installed.)
Preparing to unpack .../0-postgresql-common_283.pgdg24.04+1_all.deb ...
Leaving 'diversion of /usr/bin/pg_config to /usr/bin/pg_config.libpq-dev by postgresql-common'
Unpacking postgresql-common (283.pgdg24.04+1) over (257build1.1) ...
Preparing to unpack .../1-postgresql-client-common_283.pgdg24.04+1_all.deb ...
Unpacking postgresql-client-common (283.pgdg24.04+1) over (257build1.1) ...
Selecting previously unselected package libllvm19:amd64.
Preparing to unpack .../2-libllvm19_1%3a19.1.1-1ubuntu1~24.04.2_amd64.deb ...
Unpacking libllvm19:amd64 (1:19.1.1-1ubuntu1~24.04.2) ...
Preparing to unpack .../3-libpq5_18.0-1.pgdg24.04+3_amd64.deb ...
Unpacking libpq5:amd64 (18.0-1.pgdg24.04+3) over (16.10-0ubuntu0.24.04.1) ...
Selecting previously unselected package liburing2:amd64.
Preparing to unpack .../4-liburing2_2.5-1build1_amd64.deb ...
Unpacking liburing2:amd64 (2.5-1build1) ...
Selecting previously unselected package libxslt1.1:amd64.
Preparing to unpack .../5-libxslt1.1_1.1.39-0exp1ubuntu0.24.04.2_amd64.deb ...
Unpacking libxslt1.1:amd64 (1.1.39-0exp1ubuntu0.24.04.2) ...
Selecting previously unselected package postgresql-client-18.
Preparing to unpack .../6-postgresql-client-18_18.0-1.pgdg24.04+3_amd64.deb ...
Unpacking postgresql-client-18 (18.0-1.pgdg24.04+3) ...
Selecting previously unselected package postgresql-18.
Preparing to unpack .../7-postgresql-18_18.0-1.pgdg24.04+3_amd64.deb ...
Unpacking postgresql-18 (18.0-1.pgdg24.04+3) ...
Selecting previously unselected package postgresql-18-jit.
Preparing to unpack .../8-postgresql-18-jit_18.0-1.pgdg24.04+3_amd64.deb ...
Unpacking postgresql-18-jit (18.0-1.pgdg24.04+3) ...
Setting up postgresql-client-common (283.pgdg24.04+1) ...
Removing obsolete conffile /etc/postgresql-common/supported_versions ...
Setting up libllvm19:amd64 (1:19.1.1-1ubuntu1~24.04.2) ...
Setting up libpq5:amd64 (18.0-1.pgdg24.04+3) ...
Setting up postgresql-common (283.pgdg24.04+1) ...
Installing new version of config file /etc/postgresql-common/pg_upgradecluster.d/analyze ...
debconf: unable to initialize frontend: Dialog
debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 79.)
debconf: falling back to frontend: Readline
Replacing config file /etc/postgresql-common/createcluster.conf with new version
Setting up libxslt1.1:amd64 (1.1.39-0exp1ubuntu0.24.04.2) ...
Setting up liburing2:amd64 (2.5-1build1) ...
Setting up postgresql-client-18 (18.0-1.pgdg24.04+3) ...
update-alternatives: using /usr/share/postgresql/18/man/man1/psql.1.gz to provide /usr/share/man/man1/psql.1.gz (psql.1.gz) in auto mode
Setting up postgresql-18 (18.0-1.pgdg24.04+3) ...
debconf: unable to initialize frontend: Dialog
debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 79.)
debconf: falling back to frontend: Readline
Creating new PostgreSQL cluster 18/main ...
/usr/lib/postgresql/18/bin/initdb -D /var/lib/postgresql/18/main --auth-local peer --auth-host scram-sha-256 --no-instructions
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 "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are enabled.

fixing permissions on existing directory /var/lib/postgresql/18/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
Setting up postgresql-18-jit (18.0-1.pgdg24.04+3) ...
Processing triggers for libc-bin (2.39-0ubuntu8.6) ...
Scanning processes...                                                                                                                                                                                                                                                                    
Scanning linux images...

Как можно увидеть из вывода процесса установки, после установки всех необходимых пакетов был создан кластер с именем ’18/main’, для этого была запущена команда /usr/lib/postgresql/18/bin/initdb с опциями

-D /var/lib/postgresql/18/main --auth-local peer --auth-host scram-sha-256 --no-instructions

Опция -D задает путь для размещения файлов нового кластера.

Чтобы проверить что наш новый кластер запущен можно воспользоваться systemctl status и указать имя юнита в формате postgresql@%v-%c.service или для 18-й версии и кластера main это будет [email protected]

systemctl status [email protected]

Вывод команды:

[email protected] - PostgreSQL Cluster 18-main
     Loaded: loaded (/usr/lib/systemd/system/[email protected]; enabled-runtime; preset: enabled)
     Active: active (running) since Sun 2025-09-28 14:04:52 MSK; 2min 58s ago
    Process: 3251 ExecStart=/usr/bin/pg_ctlcluster --skip-systemctl-redirect 18-main start (code=exited, status=0/SUCCESS)
   Main PID: 3256 (postgres)
      Tasks: 9 (limit: 2197)
     Memory: 25.4M (peak: 32.5M)
        CPU: 218ms
     CGroup: /system.slice/system-postgresql.slice/[email protected]
             ├─3256 /usr/lib/postgresql/18/bin/postgres -D /var/lib/postgresql/18/main -c config_file=/etc/postgresql/18/main/postgresql.conf
             ├─3257 "postgres: 18/main: io worker 0"
             ├─3258 "postgres: 18/main: io worker 2"
             ├─3259 "postgres: 18/main: io worker 1"
             ├─3260 "postgres: 18/main: checkpointer "
             ├─3261 "postgres: 18/main: background writer "
             ├─3263 "postgres: 18/main: walwriter "
             ├─3264 "postgres: 18/main: autovacuum launcher "
             └─3265 "postgres: 18/main: logical replication launcher "

Sep 28 14:04:50 dbserver.local systemd[1]: Starting [email protected] - PostgreSQL Cluster 18-main...
Sep 28 14:04:52 dbserver.local systemd[1]: Started [email protected] - PostgreSQL Cluster 18-main.

Наш первый кластер PostgreSQL версии 18 установлен и запущен.

Из интересного в выводе о запуске можно увидеть процессы io worker с номерами 0, 1, 2 — это как раз те самые рабочие процессы которые отвечают за подсистему асинхронного ввода/вывод (AIO) (новый параметр io_method=worker и io_workers=3).

С помощью утилиты netstat мы можем проверить что процесс postgres слушает сетевой порт 5432

# netstat -ltupn | grep postgres
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      3256/postgres       
tcp6       0      0 ::1:5432                :::*                    LISTEN      3256/postgres

Так же мы можем подключиться к нашему кластеру через утилиту psql и выполнить простой запрос по проверке версии PostgreSQL (чтобы подключиться без пароля нам нужно запустить psql под пользователем postgres, для этого мы воспользуется утилитой su):

# su - postgres -c psql
psql (18.0 (Ubuntu 18.0-1.pgdg24.04+3))
Type "help" for help.

postgres=# SELECT version();
                                                              version                                                              
-----------------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 18.0 (Ubuntu 18.0-1.pgdg24.04+3) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0, 64-bit
(1 row)

postgres=# \q

Мы видим, что у нас установлена версия 18.0 из официального репозитория pgdg

На этом статья завершена, мы установили PostgreSQL 18. До скорых встреч, пока!

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


Подписаться
Уведомить о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x