Первое подключение и первый запрос
Первое подключение и первый запрос
В предыдущем уроке вы установили PostgreSQL, SQLite и узнали об онлайн-песочницах. Но установленный инструмент, который вы ни разу не запускали, — не инструмент, а иконка на рабочем столе. В этом уроке мы превратим установку в работу: подключимся к базе данных, создадим первую таблицу, заполним её данными и выполним самый важный SQL-запрос — SELECT. С этого момента SQL перестаёт быть абстракцией.
Подключение к PostgreSQL через psql
psql — это официальный интерактивный клиент PostgreSQL, работающий в терминале. Он поставляется вместе с сервером и доступен сразу после установки.
Базовая команда для подключения:
psql -U postgres
Флаг -U задаёт имя пользователя базы данных. postgres — суперпользователь, создаваемый автоматически при установке. Если PostgreSQL запущен и пароль настроен, вы увидите приглашение:
psql (16.2)
Type "help" for help.
postgres=#
Символ # в приглашении говорит о том, что вы работаете как суперпользователь. У обычного пользователя было бы =>. Это не ошибка — просто наглядная подсказка о правах.
Если сервер работает не на стандартном хосте localhost или порте 5432, команда расширяется:
psql -U postgres -h localhost -p 5432 -d mydb
Флаг -d указывает, к какой именно базе подключиться. Без него psql пробует подключиться к базе с именем, совпадающим с вашим логином операционной системы.
Навигация внутри psql
psql — не просто окно для ввода SQL. Он поддерживает специальные мета-команды, которые начинаются с обратного слеша \. Они не являются SQL и выполняются самим клиентом, а не сервером:
\l -- список всех баз данных
\c dbname -- переключиться на другую базу
\dt -- список таблиц в текущей базе
\d books -- структура таблицы books (колонки и типы)
\timing -- включить/выключить измерение времени запросов
\q -- выйти из psql
Запустите \l сразу после подключения — вы увидите список системных баз: postgres, template0, template1. Это нормально, они создаются при установке PostgreSQL. Ваши рабочие базы будут добавляться к этому списку.
Создание тестовой базы и первой таблицы
Для первых экспериментов создадим отдельную базу данных, чтобы не засорять системные объекты:
CREATE DATABASE learning;
После выполнения psql ответит CREATE DATABASE. Теперь переключимся на новую базу мета-командой:
\c learning
Вы увидите: You are now connected to database "learning" as user "postgres". Теперь создадим простую таблицу с книгами:
CREATE TABLE books (
id INTEGER,
title TEXT,
year INTEGER
);
psql ответит CREATE TABLE. Таблица пустая. Добавим несколько строк:
INSERT INTO books VALUES (1, 'Мастер и Маргарита', 1967);
INSERT INTO books VALUES (2, 'Преступление и наказание', 1866);
INSERT INTO books VALUES (3, 'Мы', 1924);
На каждую команду INSERT сервер отвечает INSERT 0 1 — это значит: «добавлена 1 строка». CREATE TABLE и INSERT INTO — команды, которые мы подробно разберём в модуле 8 и 9. Сейчас воспринимайте их как подготовительный шаг.
Проверим, что таблица существует:
\dt
Вы увидите books в списке. А \d books покажет структуру: три колонки id, title, year с их типами данных.
Первый запрос: SELECT * FROM
Самый базовый SQL-запрос — это запрос, который возвращает все строки и все колонки таблицы:
SELECT * FROM books;
Выполните его. Результат в терминале будет выглядеть так:
id | title | year
----+--------------------------+------
1 | Мастер и Маргарита | 1967
2 | Преступление и наказание | 1866
3 | Мы | 1924
(3 rows)
Разберём запрос посимвольно:
SELECT— ключевое слово, означающее «верни данные». Это команда чтения; она не изменяет базу данных.*— звёздочка-шаблон, означающая «все колонки таблицы».FROM books— указывает источник данных.FROMобязателен, когда вы читаете из таблицы.;— разделитель команд. В psql запрос не выполняется без точки с запятой.
PostgreSQL возвращает результат в виде аккуратной таблицы. В строке (3 rows) — количество найденных строк. Если таблица пустая, вы увидите (0 rows) — это не ошибка, просто в таблице пусто.
Проверь себя: что произойдёт, если выполнить SELECT * FROM books; сразу после CREATE TABLE books (...) и до выполнения INSERT?
Подключение к SQLite
SQLite устроен иначе: нет сервера, нет пользователей, нет сложной настройки. База данных — это просто файл на диске. Запустить сессию SQLite:
sqlite3 learning.db
Если файл learning.db не существует, SQLite создаст его автоматически. Вы попадёте в интерфейс, похожий на psql. Мета-команды здесь начинаются с точки:
.tables -- список таблиц
.schema books -- структура таблицы books
.mode column -- форматирование вывода (таблица с выравниванием)
.headers on -- показывать заголовки колонок
.quit -- выйти
После .headers on и .mode column вывод станет более читаемым. Создание таблицы и SELECT * FROM books синтаксически идентичны PostgreSQL — это и есть сила SQL как стандарта.
Чтобы выйти из SQLite: .quit или Ctrl+D.
Первый запрос в онлайн-песочнице
Если вы используете онлайн-инструмент вроде SQLiteOnline или аналогичный, интерфейс будет графическим: текстовое поле для SQL, кнопка «Run» или «Execute», результат ниже. Сам запрос не отличается:
SELECT * FROM customers;
В большинстве онлайн-песочниц уже есть демонстрационные таблицы — customers, orders, products. Просто напишите SELECT * FROM и название любой из них. Так удобно исследовать незнакомую структуру.
Одно отличие от psql: во многих онлайн-инструментах точка с запятой не обязательна, если в поле только один запрос. Но привычку ставить ; стоит выработать сразу — в реальных инструментах она всегда нужна.
Типичная ошибка: запрос без точки с запятой
Это самая частая ловушка для новичков. В psql нажатие Enter без ; не выполняет запрос — оно просто переносит курсор на следующую строку. Приглашение меняется с postgres=# на postgres-#:
postgres=# SELECT * FROM books
postgres-#
Это не ошибка и не зависание — psql ждёт продолжения. Просто добавьте ; и нажмите Enter:
postgres-# ;
Запрос выполнится. Эта фича полезна: длинные запросы можно писать в несколько строк, и psql отправит их все разом при появлении ;.
Другая типичная ошибка — опечатка в имени таблицы. PostgreSQL по умолчанию не делает различий между заглавными и строчными в именах таблиц и колонок (если они не взяты в кавычки). То есть BOOKS, Books и books — одно и то же. Но пробелы и опечатки вызовут ошибку:
SELECT * FROM book; -- ошибка: таблицы "book" не существует
psql ответит: ERROR: relation "book" does not exist. «Relation» — это внутренний термин PostgreSQL для «таблицы».
Проверь себя: вы написали SELECT * FROM books без ; и видите postgres-#. Как продолжить выполнение запроса?
Запрос — это вопрос к базе данных
Вот полезная ментальная модель: SELECT * FROM books — это вопрос на языке SQL: «Дай мне всё, что есть в таблице books». База данных принимает запрос, обрабатывает его, возвращает ответ — таблицу результатов.
Важно: SELECT не изменяет данные. Сколько бы раз вы ни выполняли SELECT * FROM books, таблица остаётся прежней. Это безопасная операция, которую можно повторять сколько угодно.
Краткий итог
psql -U postgres— подключение к PostgreSQL; мета-команды начинаются с\sqlite3 myfile.db— открыть или создать базу SQLite; мета-команды начинаются с.SELECT * FROM tablename;— базовый запрос: все строки, все колонки*означает «все колонки»,FROMуказывает таблицу-источник- В psql запрос выполняется только после
;— без неё psql ждёт продолжения SELECTтолько читает данные, не изменяет их
Что дальше
Вы умеете подключиться и получить все данные из таблицы — это важный первый шаг. Но SELECT * возвращает всё подряд, а в реальных задачах нужны конкретные колонки. В следующем модуле мы подробно разберём синтаксис SELECT: как выбирать отдельные колонки, давать им псевдонимы и управлять структурой результата.