Буквально 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. До скорых встреч, пока!
Если у Вас возникли вопросы или Вы хотите, чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Профессионально занимаюсь системным администрированием Linux -серверов и баз данных (MySQL, PostgreSQL) на протяжении последних 24 лет.