psql и мета-команды
Осваиваем главные мета-команды psql — без них работа в консоли будет вслепую.
Мета-команды — это служебные команды psql, начинающиеся с обратного слеша (
\); они не отправляются на сервер как SQL, а выполняются самим клиентом.
Два вида команд внутри psql
В psql вы вводите два рода команд. Первый — обычный SQL, он заканчивается точкой с запятой и уходит на сервер. Второй — мета-команды клиента: они короткие, начинаются с \ и не требуют точки с запятой. Мета-команды показывают структуру базы и управляют сессией.
Навигация по базе
Эти команды отвечают на вопрос «что вообще есть в базе».
\l -- список всех баз данных кластера
\c shop -- переключиться (connect) на базу shop
\dt -- список таблиц текущей базы
\dn -- список схем
\dv -- список представлений (views)
\df -- список функций
Команда \dt покажет таблицы, их схему и владельца. Если таблиц нет, psql честно скажет «Did not find any relations».
Структура конкретной таблицы
Самая частая команда в повседневной работе — \d имя_таблицы. Она показывает столбцы, их типы, ограничения и индексы.
\d users -- структура таблицы users
\d+ users -- то же, но подробнее (с размером, комментариями)
Вывод \d users выглядит примерно так — колонки, типы, можно ли NULL и значения по умолчанию:
Table "public.users"
Column | Type | Nullable | Default
--------+---------------+----------+-----------
id | integer | not null | nextval(...)
email | varchar(255) | not null |
name | text | |
Indexes:
"users_pkey" PRIMARY KEY, btree (id)
Управление сессией и помощь
| Команда | Что делает |
\q | выйти из psql |
\? | справка по мета-командам |
\h SELECT | справка по синтаксису SQL-команды |
\x | включить расширенный (вертикальный) вывод |
\timing | показывать время выполнения запросов |
\i file.sql | выполнить SQL из файла |
Особенно полезен \x: когда в строке много столбцов и они не влезают по ширине, вертикальный режим показывает каждое поле на своей строке. А \h — встроенный справочник: \h CREATE TABLE мгновенно напомнит синтаксис.
Выполнение SQL из файла
Скрипты со схемой и данными удобно держать в файлах и прогонять целиком — это основа повторяемых миграций и сидов.
# Прямо из шелла, не заходя в psql:
psql -U postgres -d shop -f schema.sql
# Или уже внутри psql:
\i schema.sql
Итог
- Мета-команды начинаются с
\и выполняются клиентом, а не сервером; точка с запятой им не нужна. \l— базы,\dt— таблицы,\d имя— структура таблицы,\q— выход.\i file.sqlиpsql -fпрогоняют SQL из файла;\xвключает удобный вертикальный вывод.