Все материалы
Продуктовая аналитикачеклистстарт

Команды psql: шпаргалка по консоли PostgreSQL

Команды psql с примерами: подключение, \l, \c, \dt, \d, \x, \timing, выполнение файла, выгрузка в CSV, пароль без ввода через .pgpass, частые ошибки и приглашения консоли.

КейсПрактика31 октября 2026 г.8 мин

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 psqlLinux: войти суперпользователем без пароля
docker exec -it pg psql -U postgrespsql внутри контейнера с 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пользователи и роли
codeВывод \d payments на копии учебной базы
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
NULL и пустая строка выглядят одинаково

По умолчанию 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.

codeДве выгрузки одного запроса в CSV
-- из командной строки
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 проигнорирует файл и снова спросит пароль.

codeПример строки ~/.pgpass
db.example.ru:5432:mayak:analyst:придуманный-пароль
localhost:5432:*:postgres:другой-пароль

Настроить psql под себя: .psqlrc

При запуске psql выполняет команды из файла ~/.psqlrc. Туда кладут то, что иначе набираешь в каждой сессии: показывать время запросов, NULL заметным знаком, широкие строки столбиком. Достаточно трёх строк.

codeМинимальный ~/.psqlrc
\timing on
\x auto
\pset null '∅'

Что значит приглашение psql

Приглашение подсказывает, в каком состоянии консоль. Если psql «не реагирует» на Enter, почти всегда дело в нём: запрос не закончен точкой с запятой или открыта кавычка.

Приглашения psql
ПриглашениеЧто значитЧто сделать
mayak=>обычный пользователь, готов к вводу—
mayak=#вы суперпользовательаккуратнее с DELETE и DROP
mayak-#psql ждёт продолжения запросапоставьте ; и нажмите Enter
mayak'#открыта одинарная кавычказакройте кавычку, затем ;
mayak(#открыта скобказакройте скобку
mayak=*>открыта транзакциязакончите её: commit; или rollback;
mayak=!>в транзакции была ошибкаrollback; и повторите запрос
  • Сбросить набранный запрос, не выполняя его, — \r.
  • Прервать долгий запрос — Ctrl+C: psql попросит сервер отменить его.
  • Выйти — \q или Ctrl+D.

Частые ошибки

Сообщение — причина — что сделать
СообщениеПричинаЧто сделать
psql: command not foundpsql не в 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 с нуля», где каждое решение проверяется.

Продолжить чтение
Вся библиотека