Команды psql: шпаргалка по консоли PostgreSQL
Команды psql с примерами: подключение, \l, \c, \dt, \d, \x, \timing, выполнение файла, выгрузка в CSV, пароль без ввода через .pgpass, частые ошибки и приглашения консоли.
Содержание статьи
psql — консольный клиент PostgreSQL, он ставится вместе с сервером и есть на любой машине, где есть база. Графический клиент не всегда под рукой: на сервере его нет, а для быстрой проверки «сколько строк в таблице» открывать окна дольше, чем набрать одну команду. Ниже — шпаргалка по командам psql, сгруппированная по задачам: подключиться, осмотреть базу, выполнить запрос и файл, выгрузить результат, настроить консоль под себя. В конце — приглашения консоли и ошибки, на которых застревают чаще всего.
Коротко
- Подключение:
psql -h хост -p 5432 -U пользователь -d база. - Команды psql начинаются с обратной косой черты и выполняются по Enter:
\dt— таблицы,\d имя— описание таблицы,\q— выход. - SQL-запрос выполняется только после точки с запятой. Приглашение
база-#значит, что psql ждёт продолжения. \x autoпоказывает широкие строки столбиком,\timing— время каждого запроса.- Выгрузка в CSV:
psql --csv -c "запрос" > файл.csvили\copy (запрос) to 'файл.csv' csv header.
Как подключиться
psql принимает те же пять параметров, что и любой клиент: хост, порт, пользователь, база и пароль. Пароль в командной строке не передаётся — psql спросит его сам. Если параметр не указан, берётся значение по умолчанию: сокет локального сервера, порт 5432, пользователь и база с именем вашего пользователя в системе.
Вместо отдельных ключей можно передать строку подключения — её часто присылают администраторы и облачные сервисы. В Linux к локальному серверу под суперпользователем подключаются через системного пользователя: sudo -u postgres psql.
| Команда | Что делает |
|---|---|
psql -h localhost -p 5432 -U analyst -d mayak | подключиться к базе mayak пользователем analyst |
psql "postgresql://analyst@db.example.ru:5432/mayak" | то же одной строкой подключения |
psql "postgresql://analyst@db.example.ru/mayak?sslmode=require" | с обязательным шифрованием |
sudo -u postgres psql | Linux: войти суперпользователем без пароля |
docker exec -it pg psql -U postgres | psql внутри контейнера с PostgreSQL |
\c mayak | уже внутри psql: переключиться на другую базу |
\conninfo | показать, куда и кем вы подключены |
Осмотреть базу: \l, \dt, \d
Первое, что делают в незнакомой базе, — смотрят, какие есть базы, схемы и таблицы. Буква после \d обозначает тип объекта: t — таблицы, v — представления, i — индексы, n — схемы, f — функции. Плюс в конце (\dt+) добавляет размер и описание.
Команды принимают шаблон: \dt sales.* покажет все таблицы схемы sales, \dt *order* — таблицы со словом order в названии. Без шаблона psql показывает только объекты из схем, которые есть в пути поиска (search_path), обычно это public.
| Команда | Что показывает |
|---|---|
\l | список баз на сервере |
\dn | схемы текущей базы |
\dt | таблицы в схемах из search_path |
\dt *.* | таблицы всех схем, включая системные |
\dt+ | таблицы с размером и описанием |
\d payments | столбцы, типы, ограничения и индексы таблицы |
\d+ payments | то же плюс описание столбцов и способ хранения |
\dv, \dm | представления и материализованные представления |
\di | индексы |
\df | функции |
\du | пользователи и роли |
mayak=> \d payments
Table "public.payments"
Column | Type | Collation | Nullable | Default
--------------+---------------+-----------+----------+---------
payment_id | integer | | |
user_id | integer | | |
paid_at | date | | |
amount | numeric(10,2) | | |
plan | text | | |
payment_type | text | | |Выполнить запрос и прочитать результат
Обычный SQL набирается прямо в приглашении и может занимать несколько строк. psql отправит запрос на сервер, только когда встретит точку с запятой. Стрелка вверх возвращает предыдущие строки, \e открывает последний запрос в текстовом редакторе — удобно, когда запрос длинный.
Если строк больше, чем помещается на экране, psql показывает их через программу постраничного просмотра. Пролистать — пробел, выйти — клавиша q. Отключить просмотр совсем — \pset pager off.
| Команда | Что делает |
|---|---|
\x auto | широкие строки — столбиком, узкие — таблицей |
\timing | показывать время выполнения каждого запроса |
\e | открыть последний запрос в редакторе |
\g | повторить последний запрос |
\gx | повторить и вывести столбиком |
\watch 10 | выполнять последний запрос каждые 10 секунд |
\pset null '∅' | показывать NULL заметным знаком, а не пустотой |
\h select | справка по синтаксису SQL-команды |
\? | список всех команд psql |
По умолчанию psql печатает NULL как пустую ячейку — так же, как пустую строку. Команда \pset null '∅' делает разницу видимой, и половина вопросов «почему фильтр не находит пустые значения» снимается сразу.
Выполнить файл и запрос из командной строки
Длинные запросы удобно держать в файлах. Внутри psql файл выполняет \i путь/к/файлу.sql, снаружи — ключ -f. Ключ -c выполняет одну команду и выходит: так psql встраивают в скрипты и задания по расписанию.
По умолчанию psql продолжает выполнять файл после ошибки, и в результате половина команд прошла, а половина — нет. Ключ -v ON_ERROR_STOP=1 останавливает выполнение на первой ошибке и возвращает ненулевой код выхода.
| Команда | Что делает |
|---|---|
psql -d mayak -f report.sql | выполнить файл |
psql -d mayak -v ON_ERROR_STOP=1 -f report.sql | остановиться на первой ошибке |
psql -d mayak -c "select count(*) from users" | выполнить одну команду и выйти |
psql -d mayak -At -c "select count(*) from users" | вывести только значение, без заголовков и рамки |
Выгрузить результат в CSV
Начиная с psql 12 есть ключ --csv: результат печатается в формате CSV с заголовком, и его остаётся перенаправить в файл. Внутри psql то же делает \copy с запросом в скобках. В отличие от SQL-команды COPY, \copy пишет файл на вашем компьютере, а не на сервере, и не требует особых прав.
Для одного числа в скрипте удобен ключ -At: без выравнивания (-A) и без заголовков (-t) psql выводит голое значение, например 4613.
-- из командной строки
psql -d mayak --csv -c "select plan, count(*) from payments group by plan order by 1" > plans.csv
-- изнутри psql
\copy (select plan, count(*) from payments group by plan order by 1) to 'plans.csv' csv header
-- содержимое plans.csv на учебной базе:
-- plan,count
-- basic,706
-- pro,403
-- team,142Пароль без ввода: .pgpass
Вводить пароль при каждом запуске скрипта неудобно, а писать его в команду небезопасно: он останется в истории оболочки. Для этого есть файл ~/.pgpass (на Windows — %APPDATA%\postgresql\pgpass.conf). Каждая строка — одно подключение в формате хост:порт:база:пользователь:пароль, звёздочка подходит к любому значению.
На macOS и Linux psql читает файл, только если доступ к нему есть у одного владельца: выполните chmod 600 ~/.pgpass. Иначе psql проигнорирует файл и снова спросит пароль.
db.example.ru:5432:mayak:analyst:придуманный-пароль
localhost:5432:*:postgres:другой-парольНастроить psql под себя: .psqlrc
При запуске psql выполняет команды из файла ~/.psqlrc. Туда кладут то, что иначе набираешь в каждой сессии: показывать время запросов, NULL заметным знаком, широкие строки столбиком. Достаточно трёх строк.
\timing on
\x auto
\pset null '∅'Что значит приглашение psql
Приглашение подсказывает, в каком состоянии консоль. Если psql «не реагирует» на Enter, почти всегда дело в нём: запрос не закончен точкой с запятой или открыта кавычка.
| Приглашение | Что значит | Что сделать |
|---|---|---|
mayak=> | обычный пользователь, готов к вводу | — |
mayak=# | вы суперпользователь | аккуратнее с DELETE и DROP |
mayak-# | psql ждёт продолжения запроса | поставьте ; и нажмите Enter |
mayak'# | открыта одинарная кавычка | закройте кавычку, затем ; |
mayak(# | открыта скобка | закройте скобку |
mayak=*> | открыта транзакция | закончите её: commit; или rollback; |
mayak=!> | в транзакции была ошибка | rollback; и повторите запрос |
- Сбросить набранный запрос, не выполняя его, —
\r. - Прервать долгий запрос —
Ctrl+C: psql попросит сервер отменить его. - Выйти —
\qилиCtrl+D.
Частые ошибки
| Сообщение | Причина | Что сделать |
|---|---|---|
| psql: command not found | psql не в PATH | добавьте каталог bin PostgreSQL в PATH или запускайте по полному пути |
| database "analyst" does not exist | без -d psql ищет базу с именем пользователя | укажите базу: -d postgres |
| role "postgres" does not exist | на macOS через Homebrew суперпользователь — ваше имя | подключайтесь без -U или с -U <ваше имя> |
| Did not find any relations | таблиц нет в схемах из search_path | проверьте схемы \dn и смотрите \dt схема.* |
| current transaction is aborted | в открытой транзакции была ошибка | выполните rollback; и повторите |
Частые вопросы
Как посмотреть список таблиц в psql?
Командой \dt. Таблицы конкретной схемы — \dt схема.*, всех схем — \dt *.*.
Как посмотреть структуру таблицы?
\d имя_таблицы: столбцы, типы, ограничения и индексы.
Как выйти из psql?
\q или Ctrl+D. Если вы в просмотре длинного результата, сначала нажмите q.
Как выполнить SQL-файл?
Снаружи — psql -d база -f файл.sql, внутри psql — \i файл.sql.
Как сменить базу, не выходя из psql?
\c имя_базы.
Можно ли учить SQL без psql?
Можно: для запросов к готовой учебной базе установка не нужна. psql пригодится, когда появится свой сервер или доступ к рабочей базе.
Писать запросы удобнее всего учиться на готовой базе в браузере: в песочнице или в курсе «SQL с нуля», где каждое решение проверяется.
Материалы по теме

Как установить PostgreSQL и написать первый запрос
Установка PostgreSQL на Windows, macOS, Linux и в Docker, подключение через psql и pgAdmin, порт и пароль по умолчанию, первые команды и частые ошибки.

DBeaver для аналитика: подключение к PostgreSQL, ClickHouse и выгрузка
Как работать в DBeaver: подключение к PostgreSQL и ClickHouse, SSH-туннель, режим только для чтения, горячие клавиши, параметры в запросе, выгрузка в CSV и Excel.

pgAdmin 4: как подключиться к PostgreSQL и выполнить запрос
pgAdmin 4 по шагам: регистрация сервера, мастер-пароль, где искать таблицы, Query Tool и горячие клавиши, план запроса, выгрузка в CSV, импорт файла, ER-диаграмма и частые ошибки.