psql — командная строка PostgreSQL. Всё что нужно для работы с базой данных без GUI. Разбираем все slash-команды, параметры подключения, форматирование вывода и выполнение скриптов.

- Запуск psql и подключение к базе
- Команды навигации — базы, таблицы, схемы
- Пользователи и права
- Выполнение запросов и скриптов
- Форматирование вывода
- Полная таблица slash-команд
- Полезные системные запросы
- Часто задаваемые вопросы
- Как выйти из psql?
- Как посмотреть все таблицы в PostgreSQL через psql?
- Как подключиться к удалённому PostgreSQL через psql?
Запуск psql и подключение к базе
# Подключиться к базе postgres (по умолчанию):
psql -U postgres
# Подключиться к конкретной базе:
psql -U postgres -d mydb
# Полный набор параметров:
psql -h localhost -p 5432 -U myuser -d mydb
# Запросить пароль явно:
psql -U postgres -W
# Linux — от системного пользователя postgres:
sudo -u postgres psql
sudo -u postgres psql -d mydb
# Через строку подключения (URL):
psql "postgresql://myuser:mypass@localhost:5432/mydb"
# Выполнить одну команду и выйти:
psql -U postgres -c "SELECT version();"
psql -U postgres -d mydb -c "\dt"
Команды навигации — базы, таблицы, схемы
-- Базы данных:
\l -- список всех баз данных
\l+ -- список с размерами и владельцами
-- Подключение к базе:
\c mydb -- переключиться на базу mydb
\c mydb myuser -- переключиться с другим пользователем
\conninfo -- показать текущее подключение
-- Схемы:
\dn -- список схем
\dn+ -- схемы с правами доступа
-- Таблицы:
\dt -- таблицы в текущей схеме (public)
\dt *.* -- таблицы во всех схемах
\dt users -- информация о таблице users
-- Структура таблицы:
\d users -- колонки, типы, ограничения, индексы
\d+ users -- расширенная информация + комментарии
-- Другие объекты:
\di -- индексы
\dv -- представления (VIEW)
\dm -- материализованные представления
\df -- функции
\ds -- sequences
\dp -- права доступа (таблицы, схемы)
Пользователи и права
-- Пользователи и роли:
\du -- список пользователей/ролей
\du+ -- с дополнительными атрибутами
\du myuser -- информация о конкретном пользователе
-- Сменить пароль текущего пользователя:
\password
-- Сменить пароль конкретного пользователя:
\password postgres
Выполнение запросов и скриптов
-- Запрос — ввести и нажать Enter после ";":
SELECT * FROM users LIMIT 5;
-- Многострочный запрос (psql ждёт ; для выполнения):
SELECT id, email, created_at
FROM users
WHERE active = true
ORDER BY created_at DESC
LIMIT 10;
-- Выполнить SQL файл:
\i /path/to/script.sql
-- Выполнить файл с параметрами:
\i /tmp/init.sql
-- Из bash без входа в psql:
psql -U postgres -d mydb -f script.sql
Форматирование вывода
-- Расширенный режим (вертикальный вывод — удобно для широких таблиц):
\x
-- Или автоматически (переключается по ширине терминала):
\x auto
-- Отключить заголовки столбцов:
\t
-- Показать время выполнения запроса:
\timing
-- Отключить постраничный вывод (more/less):
\pset pager off
-- Отображение NULL значений:
\pset null 'NULL'
-- Сохранить вывод запроса в файл:
\o output.txt
SELECT * FROM users;
\o -- выключить вывод в файл
-- Формат вывода (aligned, unaligned, csv, html):
\pset format csv
\pset format aligned -- вернуть к стандартному
Полная таблица slash-команд
| Команда | Описание |
|---|---|
\l | Список баз данных |
\c имя | Подключиться к БД |
\dt | Список таблиц |
\d таблица | Структура таблицы |
\du | Список пользователей |
\dn | Список схем |
\dv | Список VIEW |
\di | Список индексов |
\ds | Список sequences |
\df | Список функций |
\dp | Права доступа |
\i файл | Выполнить SQL файл |
\o файл | Сохранить вывод в файл |
\x | Переключить вертикальный режим |
\timing | Показать время запроса |
\conninfo | Текущее подключение |
\password | Изменить пароль |
\e | Открыть редактор для запроса |
\s | История команд |
\q | Выйти из psql |
\h команда | Справка по SQL команде |
\? | Справка по psql командам |
Полезные системные запросы
-- Версия PostgreSQL:
SELECT version();
SHOW server_version;
-- Текущая база, пользователь, порт:
SELECT current_database(), current_user;
SHOW port;
-- Размер всех баз данных:
SELECT datname, pg_size_pretty(pg_database_size(datname)) AS size
FROM pg_database ORDER BY pg_database_size(datname) DESC;
-- Список таблиц с размерами:
SELECT tablename, pg_size_pretty(pg_total_relation_size(tablename::regclass)) AS size
FROM pg_tables WHERE schemaname = 'public'
ORDER BY pg_total_relation_size(tablename::regclass) DESC;
-- Все активные подключения:
SELECT pid, usename, datname, state, query
FROM pg_stat_activity WHERE state != 'idle';
Часто задаваемые вопросы
Как выйти из psql?
Набрать \q и нажать Enter. Или нажать Ctrl+D — это стандартный сигнал конца ввода в Unix-терминалах, psql корректно завершается. На Windows также работает Ctrl+Z + Enter. Если psql завис на незавершённом запросе (видите -# вместо =#), введите ; чтобы завершить запрос, или Ctrl+C чтобы отменить.
Как посмотреть все таблицы в PostgreSQL через psql?
Команда \dt показывает таблицы в текущей схеме (public). Для таблиц в других схемах: \dt analytics.*. Для всех схем: \dt *.*. Через SQL: SELECT tablename FROM pg_tables WHERE schemaname = 'public';. Чтобы увидеть таблицы конкретной базы — сначала переключиться на неё: \c mydb, затем \dt.
Как подключиться к удалённому PostgreSQL через psql?
Указать хост через параметр -h: psql -h 192.168.1.100 -p 5432 -U myuser -d mydb. Или через строку подключения: psql "postgresql://myuser:mypass@192.168.1.100:5432/mydb". Важно: на удалённом сервере PostgreSQL должен быть настроен listen_addresses и pg_hba.conf должен разрешать подключения с вашего IP. Порт 5432 должен быть открыт в firewall.



