Як встановити PostgreSQL і psql на Ubuntu, Windows і macOS + перші команди
PostgreSQL 18 на Ubuntu, Windows, macOS і в Docker: перший вхід у psql, користувач і база для застосунку, віддалений доступ і помилки підключення.
PostgreSQL — найпопулярніша відкрита реляційна база даних: на ній працюють і невеликі пет-проєкти, і великі продакшен-системи. У цій інструкції — як встановити PostgreSQL на Ubuntu, Windows, macOS або в Docker, як уперше зайти в консоль psql, створити користувача й базу для свого застосунку та не загубитися в помилках підключення.
АктуальністьЖовтень 2026 року: актуальна стабільна версія — PostgreSQL 18. PostgreSQL 19 зараз у стадії release candidate. Для нових проєктів беріть 18, а на 19 переходьте після першого-двох мінорних релізів.
Як влаштоване підключення до PostgreSQL
Перш ніж щось встановлювати, корисно розуміти три поняття — тоді половина типових помилок зникне сама собою.
- Кластер — один запущений сервер PostgreSQL з каталогом даних. У ньому може бути багато баз.
- Роль — користувач бази даних. Ролі PostgreSQL не пов'язані з користувачами операційної системи, хоча іноді збігаються з ними за іменем.
- pg_hba.conf — файл, який вирішує, кого, звідки й яким методом пустити до бази.
На Linux є два шляхи підключення:
- Через Unix-сокет (локально, без
-h). За замовчуванням діє методpeer: PostgreSQL питає в ОС, хто ви, і пускає, якщо ім'я користувача ОС збігається з назвою ролі. Пароль не потрібен. - Через 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_lsclusterspg_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
- Відкрийте postgresql.org/download/windows і завантажте інсталятор від EDB для версії 18.
- Запустіть його. Компоненти: PostgreSQL Server, pgAdmin 4 (графічний клієнт) і Command Line Tools (
psql,pg_dump). Stack Builder для старту не потрібен. - Задайте пароль суперкористувача
postgres— запишіть його, відновити без перевстановлення незручно. - Порт залиште 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 Інші способи входу