core code helper

Як встановити PostgreSQL і psql на Ubuntu, Windows і macOS + перші команди

PostgreSQL 18 на Ubuntu, Windows, macOS і в Docker: перший вхід у psql, користувач і база для застосунку, віддалений доступ і помилки підключення.

0 імпортували Імпортувати собі

PostgreSQL — найпопулярніша відкрита реляційна база даних: на ній працюють і невеликі пет-проєкти, і великі продакшен-системи. У цій інструкції — як встановити PostgreSQL на Ubuntu, Windows, macOS або в Docker, як уперше зайти в консоль psql, створити користувача й базу для свого застосунку та не загубитися в помилках підключення.

Актуальність

Жовтень 2026 року: актуальна стабільна версія — PostgreSQL 18. PostgreSQL 19 зараз у стадії release candidate. Для нових проєктів беріть 18, а на 19 переходьте після першого-двох мінорних релізів.

Як влаштоване підключення до PostgreSQL

Перш ніж щось встановлювати, корисно розуміти три поняття — тоді половина типових помилок зникне сама собою.

  • Кластер — один запущений сервер PostgreSQL з каталогом даних. У ньому може бути багато баз.
  • Роль — користувач бази даних. Ролі PostgreSQL не пов'язані з користувачами операційної системи, хоча іноді збігаються з ними за іменем.
  • pg_hba.conf — файл, який вирішує, кого, звідки й яким методом пустити до бази.

Схема: psql підключається через Unix-сокет методом peer або через TCP з паролем; pg_hba.conf вирішує, кого пустити до кластера

На Linux є два шляхи підключення:

  1. Через Unix-сокет (локально, без -h). За замовчуванням діє метод peer: PostgreSQL питає в ОС, хто ви, і пускає, якщо ім'я користувача ОС збігається з назвою ролі. Пароль не потрібен.
  2. Через TCP (-h localhost або IP-адреса). Тут потрібен пароль: метод scram-sha-256.

Встановлення PostgreSQL на Ubuntu

Варіант 1: зі стандартного репозиторію Ubuntu

Найпростіше — один рядок:

sudo apt update
sudo apt install postgresql

Версія залежить від релізу Ubuntu: наприклад, у 24.04 це PostgreSQL 16. Вона підтримуватиметься весь час життя релізу, але це не найсвіжіша версія.

Варіант 2: свіжа версія з офіційного репозиторію PGDG

Проєкт PostgreSQL веде власний apt-репозиторій (PGDG) з усіма підтримуваними версіями. Він підключається скриптом:

sudo apt install -y postgresql-common
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh

Скрипт додасть ключ і репозиторій для вашої версії Ubuntu (підтримуються 22.04, 24.04, 26.04 і 26.10). Тепер встановіть потрібну версію:

sudo apt install postgresql-18
Ручне підключення репозиторію PGDG (без скрипта)
sudo apt install curl ca-certificates
sudo install -d /usr/share/postgresql-common/pgdg
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc

Створіть файл /etc/apt/sources.list.d/pgdg.sources, замінивши noble на кодову назву своєї системи (дізнатися: lsb_release -cs):

Types: deb
URIs: https://apt.postgresql.org/pub/repos/apt
Suites: noble-pgdg
Architectures: amd64
Components: main
Signed-By: /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc

Далі sudo apt update && sudo apt install postgresql-18. Для ARM-серверів замініть amd64 на arm64 (пакети є для LTS-релізів).

Потрібен лише клієнт?

Якщо база працює на іншому сервері, а вам треба тільки psql і pg_dump, ставте клієнт без сервера: sudo apt install postgresql-client-18.

Перевірка

Сервер запускається автоматично одразу після встановлення:

sudo systemctl status postgresql
pg_lsclusters

pg_lsclusters — корисна команда Debian/Ubuntu: показує версію, назву кластера, порт, статус і каталог даних. Типовий рядок виглядає так: 18 main 5432 online postgres /var/lib/postgresql/18/main ....

Конфігурація лежить у /etc/postgresql/18/main/, а дані — у /var/lib/postgresql/18/main/.

Перший вхід у psql

Під час встановлення створюється користувач ОС postgres і однойменна роль-суперкористувач. Заходимо від його імені — через сокет і метод peer, тож пароль не питатимуть:

sudo -u postgres psql

Ви в консолі. Рядок postgres=# означає, що ви підключені до бази postgres як суперкористувач (#; у звичайного користувача буде >). Перевірте версію:

SELECT version();

Вийти — \q або Ctrl+D.

Створюємо користувача й базу для застосунку

Працювати в застосунку від імені postgres — погана ідея: це суперкористувач із правом на все. Створіть окрему роль і базу, якою вона володітиме:

CREATE ROLE app WITH LOGIN PASSWORD 'замініть-на-довгий-пароль';
CREATE DATABASE appdb OWNER app;

Тепер підключіться як app — уже через TCP і з паролем:

psql -h localhost -U app -d appdb

Рядок підключення для застосунку виглядатиме так:

postgresql://app:пароль@localhost:5432/appdb
Для локальної розробки — роль з вашим іменем

Щоб на робочій машині писати просто psql без sudo і паролів, створіть роль з іменем свого користувача ОС і однойменну базу:

sudo -u postgres createuser --superuser $USER
createdb $USER
psql

На сервері так не робіть: суперкористувачів має бути мінімум.

Якщо треба задати пароль самому postgres (наприклад, для pgAdmin), у psql виконайте \password postgres — команда попросить ввести пароль двічі й не залишить його в історії.

Встановлення PostgreSQL на Windows

  1. Відкрийте postgresql.org/download/windows і завантажте інсталятор від EDB для версії 18.
  2. Запустіть його. Компоненти: PostgreSQL Server, pgAdmin 4 (графічний клієнт) і Command Line Tools (psql, pg_dump). Stack Builder для старту не потрібен.
  3. Задайте пароль суперкористувача postgres — запишіть його, відновити без перевстановлення незручно.
  4. Порт залиште 5432, локаль — за замовчуванням.

Щоб psql працював у будь-якому терміналі, додайте до змінної PATH папку C:\Program Files\PostgreSQL\18\bin (Параметри → Система → Про систему → Додаткові параметри → Змінні середовища), потім відкрийте новий термінал:

psql -U postgres
Кракозябри в консолі Windows

Якщо psql пише WARNING: Console code page (866) differs from Windows code page (1251), а кирилиця виводиться знаками питання, перед запуском перемкніть кодову сторінку командою chcp 1251 або користуйтеся Windows Terminal із шрифтом, що підтримує кирилицю.

Встановлення PostgreSQL на macOS

Найпростіше — Postgres.app. Завантажте з postgresapp.com, перетягніть у «Програми», запустіть і натисніть Initialize. Сервер працює, поки відкритий застосунок.

Через Homebrew — якщо любите термінал:

brew install postgresql@18
brew services start postgresql@18

Версійні формули Homebrew не додаються в PATH автоматично. Додайте їх (на Mac з Apple Silicon):

echo 'export PATH="/opt/homebrew/opt/postgresql@18/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
psql postgres

На Mac з Intel шлях починається з /usr/local/opt/. Зверніть увагу: у Homebrew суперкористувачем стає ваш користувач macOS, а ролі postgres може не бути взагалі.

PostgreSQL у Docker — за хвилину

Якщо Docker уже встановлений, це найшвидший спосіб отримати чисту базу для розробки:

docker run -d --name pg \
  -e POSTGRES_PASSWORD=secret \
  -p 127.0.0.1:5432:5432 \
  -v pgdata:/var/lib/postgresql \
  postgres:18

Зайти в консоль:

docker exec -it pg psql -U postgres
Шлях тому змінився у версії 18

В офіційному образі postgres:18 том монтується в /var/lib/postgresql, а не в /var/lib/postgresql/data, як у версіях 17 і нижче. Якщо взяти старий шлях зі старої інструкції, дані опиняться поза томом і зникнуть разом із контейнером.

Прив'язка до 127.0.0.1 важлива: без неї порт 5432 буде відкритий назовні, навіть якщо фаєрвол його блокує.

Шпаргалка psql: команди, які потрібні щодня

Команди з бекслешем — це команди самого psql, вони не потребують крапки з комою наприкінці. SQL-запити — потребують.

Команда Що робить
\l список баз
\c appdb перейти в іншу базу
\dt таблиці в поточній схемі
\d users структура таблиці: колонки, індекси, зв'язки
\dn схеми
\du ролі та їхні права
\conninfo куди й під ким ви підключені
\x перемкнути вертикальний вивід (зручно для широких рядків)
\timing показувати час виконання запитів
\i file.sql виконати SQL із файлу
\e відкрити останній запит у редакторі
\h CREATE TABLE довідка з синтаксису SQL-команди
\? усі команди psql
\q вийти

Невелика практика, щоб усе закріпити:

CREATE TABLE notes (
  id         bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  title      text NOT NULL,
  created_at timestamptz NOT NULL DEFAULT now()
);

INSERT INTO notes (title) VALUES ('Встановив PostgreSQL'), ('Розібрався з psql');

SELECT * FROM notes ORDER BY created_at DESC;

Віддалений доступ до PostgreSQL

За замовчуванням сервер слухає лише localhost. Щоб підключатися з іншої машини, потрібні дві зміни. Знайти файли конфігурації найпростіше з самого psql:

SHOW config_file;
SHOW hba_file;

1. postgresql.conf — на яких адресах слухати:

listen_addresses = 'localhost,10.0.0.5'   # або '*' — усі інтерфейси

2. pg_hba.conf — кого пускати. Додайте рядок у кінець файлу: дозволити ролі app підключатися до бази appdb з однієї адреси за паролем:

# TYPE  DATABASE  USER  ADDRESS           METHOD
host    appdb     app   203.0.113.10/32   scram-sha-256

Зміна listen_addresses потребує перезапуску, зміни в pg_hba.conf — лише перечитування конфігурації:

sudo systemctl restart postgresql
Не відкривайте 5432 усьому інтернету

Відкритий PostgreSQL постійно сканують боти, які підбирають паролі. Якщо доступ потрібен лише вам, використовуйте SSH-тунель — тоді порт бази взагалі не треба відкривати:

ssh -L 15432:localhost:5432 user@ваш-сервер

Поки тунель відкритий, підключайтеся до localhost:15432 на своїй машині — DBeaver, pgAdmin чи psql -h localhost -p 15432 потраплять на сервер. Інший локальний порт (15432) обрано, щоб не конфліктувати з PostgreSQL, якщо він стоїть і у вас.

Типові помилки підключення

FATAL: role "ім'я" does not exist

psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL:  role "nazar" does not exist

Ви запустили psql без -U, і він підключається з роллю, що збігається з вашим іменем в ОС. Такої ролі немає. Або заходьте як sudo -u postgres psql, або створіть роль (див. підказку про локальну розробку).

FATAL: Peer authentication failed for user "app"

Ви підключаєтеся через сокет (без -h), а метод peer вимагає, щоб ім'я в ОС збігалося з роллю. Додайте -h localhost — тоді підключення піде через TCP і спрацює вхід за паролем.

FATAL: password authentication failed for user "postgres"

Неправильний пароль, або в ролі пароль не задано зовсім (так буває одразу після встановлення на Linux). Зайдіть через sudo -u postgres psql і задайте його: \password postgres.

Connection refused

connection to server at "10.0.0.5", port 5432 failed: Connection refused
    Is the server running on that host and accepting TCP/IP connections?

Сервер не запущений (pg_lsclusters), не слухає потрібну адресу (listen_addresses) або порт закриває фаєрвол. Перевірити, що порт слухається: sudo ss -ltnp | grep 5432.

no pg_hba.conf entry for host

Сервер вас бачить, але в pg_hba.conf немає правила для вашої адреси, ролі чи бази. Додайте рядок host (див. розділ про віддалений доступ) і перечитайте конфігурацію: sudo systemctl reload postgresql.

permission denied for schema public

Починаючи з PostgreSQL 15, звичайні ролі не можуть створювати таблиці в схемі public чужої бази. Найпростіше рішення — щоб база належала ролі застосунку (CREATE DATABASE appdb OWNER app). Для вже наявної бази видайте право вручну, підключившись до неї як власник або суперкористувач:

GRANT CREATE ON SCHEMA public TO app;

Часті питання

psql, pgAdmin чи DBeaver? psql є всюди, працює через SSH і незамінний для скриптів. pgAdmin і DBeaver зручніші для перегляду даних і схем. Знати базові команди psql варто в будь-якому разі.

Як оновити PostgreSQL до нової мажорної версії? Мажорні версії (17 → 18) мають різний формат даних, тож простий apt upgrade їх не мігрує. На Ubuntu є pg_upgradecluster. Універсальний спосіб — pg_dump зі старої версії й відновлення в нову. Мінорні оновлення (18.0 → 18.1) ставляться звичайним apt upgrade і даних не чіпають.

Скільки пам'яті потрібно PostgreSQL? Для навчання й невеликого проєкту вистачить сервера з 1–2 ГБ RAM. Налаштування за замовчуванням консервативні — для продакшену варто збільшити shared_buffers і work_mem під свій сервер.

Як зробити бекап бази? Один рядок: pg_dump -h localhost -U app -d appdb -F c -f appdb.dump. Відновлення — pg_restore -d appdb appdb.dump.

Що далі

Тепер, коли база працює, наступний крок — навчитися писати запити й проєктувати таблиці. У рубриці PostgreSQL є статті про індекси, MVCC і VACUUM, бекапи з відновленням на момент часу, а в рубриці SQL — про JOIN і віконні функції.

Збережіть статтю собі

Увійдіть, щоб імпортувати її у власні нотатки, відмічати вивчене, ставити лайки й питати спільноту. Реєстрація безкоштовна: вхід через Google займає кілька секунд.

Увійти через Google Інші способи входу