В прошлом уроке мы подключились к серверу и увидели приглашение postgres=#. Дальше с ним можно говорить на SQL, но в psql есть и второй язык: короткие команды с обратной косой чертой. Они отвечают на вопросы «какие тут есть базы», «что лежит в этой таблице» и «сколько шёл запрос». Без них в psql работаешь вслепую.
Пульт и телевизор
У телевизора есть каналы, а у пульта кнопки. Кнопкой «громче» ты не меняешь передачу, ты настраиваешь то, как её смотришь. Каналы приходят с телестудии, кнопки работают прямо в комнате.
В psql так же. Команды SQL (SELECT, CREATE TABLE) psql отправляет серверу: это каналы. А команды, которые начинаются с обратной косой черты, psql выполняет сам, у себя: это кнопки пульта. Их называют мета-командами.
Отсюда два правила, которые экономят много нервов:
- Мета-команда заканчивается концом строки. Точка с запятой ей не нужна.
- Команда SQL заканчивается точкой с запятой. Пока её нет, psql ждёт продолжения.
Второе правило ловит каждого новичка. Ты пишешь SELECT 1, жмёшь Enter, и ничего не происходит, только приглашение поменялось:
postgres=# SELECT 1
postgres-#
Знак -# вместо =# значит «команда не закончена, продолжай». Допиши ; и нажми Enter. А если запутался в недописанном запросе, \r очистит его.
Главные кнопки
Где я и что тут есть
\l показывает список баз кластера:
List of databases
Name | Owner | Encoding | Locale Provider | Collate | Ctype | Locale | ICU Rules | Access privileges
-----------+----------+----------+-----------------+------------+------------+--------+-----------+-----------------------
bookshop | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | |
postgres | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | |
template0 | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | =c/postgres +
...
\c имя_базы переключает на другую базу. В PostgreSQL один сеанс работает ровно с одной базой, поэтому «перейти» в другую значит переподключиться:
postgres=# \c bookshop
You are now connected to database "bookshop" as user "postgres".
bookshop=#
Приглашение сменилось на bookshop=#, теперь все команды идут сюда. \conninfo напомнит, куда и под кем ты подключён.
Что лежит в базе
\dt выводит таблицы:
List of tables
Schema | Name | Type | Owner
--------+-------+-------+----------
public | books | table | postgres
(1 row)
\d books описывает одну таблицу: колонки, их типы, обязательность, значения по умолчанию и индексы.
Table "public.books"
Column | Type | Collation | Nullable | Default
--------+--------------+-----------+----------+---------
id | integer | | not null |
title | text | | not null |
author | text | | not null |
price | numeric(8,2) | | |
Indexes:
"books_pkey" PRIMARY KEY, btree (id)
Это самая частая команда psql. Перед тем как писать запрос к незнакомой таблице, посмотри её через \d.
Семейство \d большое, и буква после d говорит, что показать: \dn схемы, \du роли, \di индексы, \dv представления, \df функции. Знак + в конце добавляет подробности: \dt+ покажет ещё и размер таблиц.
Как показать результат
Широкая строка не помещается в экран и разъезжается. \x включает расширенный режим: каждая строка печатается столбиком.
bookshop=# \x
Expanded display is on.
bookshop=# SELECT * FROM books WHERE id = 1;
-[ RECORD 1 ]--------------
id | 1
title | Мастер и Маргарита
author | Булгаков
price | 690.00
Повторный \x выключает режим. А \x auto сам решает, когда включаться: если таблица влезает в ширину терминала, она печатается как обычно.
\timing включает замер времени. После каждого запроса psql пишет, сколько он шёл:
bookshop=# SELECT count(*) FROM books;
count
-------
3
(1 row)
Time: 0.180 ms
Работа с файлами и редактором
\i файл.sqlвыполняет команды из файла. Так накатывают заранее написанные скрипты: создать таблицы, залить тестовые данные.\eоткрывает последний запрос во внешнем редакторе. Длинный запрос удобнее править там, после сохранения и выхода psql выполнит его.\qвыходит из psql.
Если забыл
Запоминать всё не нужно, справка всегда под рукой:
\?выводит список всех мета-команд с короткими описаниями.\h CREATE DATABASEпоказывает синтаксис команды SQL и ссылку на документацию.
Ещё psql дописывает имена по клавише Tab: начни SELECT * FROM bo и нажми Tab. Стрелка вверх листает историю команд.
урок из курса
Урок из курса «PostgreSQL с нуля». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.