Первое подключение и первый запрос

Первое подключение и первый запрос

В предыдущем уроке вы установили 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: как выбирать отдельные колонки, давать им псевдонимы и управлять структурой результата.

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике