Первые Шаги с PostgreSQL

Добро пожаловать в курс PostgreSQL.
Да.
Мы заходим в мир баз данных.
Не паникуй.
База данных — это не дракон, который живёт под сервером.
Хотя иногда она ведёт себя именно так.
PostgreSQL — одна из самых мощных и уважаемых систем баз данных в мире.
Её используют разработчики, компании, стартапы, банки, веб-приложения, API, dashboard-ы и, вероятно, хотя бы одна загадочная система, которую никто не решается трогать, потому что “работает — не перезапускай”.
В этом курсе мы будем изучать PostgreSQL шаг за шагом.
Без магии.
Без страшной теории одним куском.
Без “прочитай 900 страниц документации и достигни просветления”.
Мы будем строить понимание через практику.
Сегодня начинаем с основ.
Что такое PostgreSQL.
Как он работает.
Как его установить.
Как открыть shell PostgreSQL.
Как создать базу данных.
Как создать таблицу.
Как вставить данные.
Как прочитать данные.
Маленькие шаги.
Настоящий прогресс.
Очень базоданно.
Что Ты Изучишь
В этом уроке ты изучишь:
- что такое PostgreSQL;
- что такое база данных;
- что такое таблица;
- что такое SQL;
- как установить PostgreSQL;
- как запустить PostgreSQL;
- как открыть
psql; - как создать первую базу данных;
- как создать первую таблицу;
- как вставить данные;
- как читать данные через
SELECT; - как безопасно выйти из PostgreSQL.
В конце этого урока у тебя будет рабочая база PostgreSQL на твоём компьютере.
Не только теория.
Настоящая база данных.
Маленькая.
Свежая.
Готовая хранить данные.
Как блокнот.
Но с большим количеством точек с запятой.
Что Такое PostgreSQL?
PostgreSQL — это реляционная система управления базами данных.
Звучит серьёзно.
Потому что это серьёзно.
Но идея простая.
PostgreSQL хранит данные.
Ты можешь использовать его, чтобы хранить:
- пользователей;
- товары;
- посты блога;
- заказы;
- комментарии;
- счета;
- задачи;
- сообщения;
- всё, что твоё приложение должно помнить.
Веб-страница может забыть всё после обновления.
База данных помнит.
Это её работа.
PostgreSQL очень хорошо помнит.
Иногда слишком хорошо.
Удаляй осторожно.
Что Такое База Данных?
База данных — это место, где данные хранятся организованно.
Представь базу данных как цифровой шкаф.
Внутри шкафа есть таблицы.
Каждая таблица хранит один тип информации.
Например:
Database: online_shop
Tables:
users
products
orders
Таблица users хранит пользователей.
Таблица products хранит товары.
Таблица orders хранит заказы.
Идея простая.
Очень мощная.
Как коробки в гараже.
Только PostgreSQL обычно не забывает, куда положил отвёртку.
Обычно.
Что Такое Таблица?
Таблица хранит данные в строках и колонках.
Пример:
таблица users
id | name | email
---|--------|------------------
1 | Anna | anna@example.com
2 | Marco | marco@example.com
3 | Viktor | viktor@example.com
Каждая колонка описывает тип данных.
Например:
id;name;email.
Каждая строка — это одна запись.
Один пользователь.
Один товар.
Один заказ.
Таблица похожа на электронную таблицу.
Но сильнее.
Более структурированная.
И менее вероятно, что её уничтожит кто-то, случайно перетащив ячейку в два часа ночи.
Что Такое SQL?
SQL означает Structured Query Language.
Это язык, который мы используем для разговора с базами данных.
Через SQL мы можем сказать:
SELECT * FROM users;
Это означает:
Дай мне всех пользователей.
Можем также сказать:
INSERT INTO users (name, email)
VALUES ('Anna', 'anna@example.com');
Это означает:
Добавь нового пользователя.
SQL — это не JavaScript.
SQL имеет свой стиль.
Свои правила.
Свою драму.
Но это не невозможно.
Ты изучишь его шаг за шагом.
SQL — это как давать инструкции очень серьёзному библиотекарю.
Если инструкция ясная, библиотекарь даёт тебе данные.
Если инструкция неправильная, библиотекарь молча осуждает тебя сообщением об ошибке.
Установка PostgreSQL
Тебе нужно установить PostgreSQL в системе.
Выбери команду для своей Linux-дистрибуции.
Arch Linux
sudo pacman -S postgresql
Инициализируй database cluster:
sudo -iu postgres initdb -D /var/lib/postgres/data
Запусти PostgreSQL:
sudo systemctl enable --now postgresql
Проверь статус:
systemctl status postgresql
Если видишь active (running), хорошо.
PostgreSQL жив.
И, возможно, уже оценивает твой SQL.
Ubuntu или Debian
sudo apt update
sudo apt install postgresql postgresql-contrib
Запусти PostgreSQL:
sudo systemctl enable --now postgresql
Проверь статус:
systemctl status postgresql
Fedora
sudo dnf install postgresql-server postgresql-contrib
Инициализируй PostgreSQL:
sudo postgresql-setup --initdb
Запусти PostgreSQL:
sudo systemctl enable --now postgresql
Проверь статус:
systemctl status postgresql
Хорошо.
Теперь PostgreSQL должен работать.
Если нет — не паникуй.
Установка базы данных иногда ведёт себя как кот, который заходит в коробку.
Должно работать.
Но иногда нужно немного поощрения.
Открой PostgreSQL через psql
PostgreSQL имеет терминальный инструмент под названием psql.
psql позволяет напрямую разговаривать с PostgreSQL.
Открой его так:
sudo -iu postgres psql
Ты должен увидеть что-то такое:
postgres=#
Это означает, что ты внутри shell PostgreSQL.
Поздравляю.
Теперь ты напрямую разговариваешь с базой данных.
Используй свои силы ответственно.
Чтобы выйти из psql, введи:
\q
Важно:
Команды PostgreSQL часто требуют точку с запятой:
SELECT version();
Но специальные команды psql, такие как \q, \l и \dt, не требуют точки с запятой.
Да.
Есть два типа команд.
Потому что базы данных любят держать новичков в тонусе.
Проверь Версию PostgreSQL
Внутри psql выполни:
SELECT version();
Ты должен увидеть информацию о версии PostgreSQL.
Это подтверждает, что PostgreSQL работает.
Ты только что спросил базу данных:
Кто ты?
И она ответила.
Вежливо.
С избытком информации.
Покажи Базы Данных
Внутри psql выполни:
\l
Это показывает список баз данных.
Ты можешь увидеть базы вроде:
postgres
template0
template1
Это стандартные базы данных.
Не удаляй их.
Они важны.
PostgreSQL создал их по системным причинам.
Когда PostgreSQL создаёт что-то под названием template0, просто оставь это в покое.
Оно знает вещи.
Создай Первую Базу Данных
Теперь создай свою первую базу данных.
Внутри psql выполни:
CREATE DATABASE learning_postgresql;
Не забудь точку с запятой.
Если всё работает, PostgreSQL скажет:
CREATE DATABASE
Теперь снова покажи базы данных:
\l
Ты должен увидеть:
learning_postgresql
Поздравляю.
Ты создал базу данных.
Маленькое королевство для твоих данных.
Замка ещё нет.
Но земля уже есть.
Подключись к Базе Данных
Чтобы подключиться к новой базе данных, выполни:
\c learning_postgresql
Ты должен увидеть что-то похожее:
You are now connected to database "learning_postgresql"
Теперь prompt может измениться:
learning_postgresql=#
Это означает, что ты работаешь внутри своей новой базы данных.
Хорошо.
Будь осторожен.
Теперь ты действуешь в своём королевстве данных.
Маленьком королевстве.
Но это считается.
Создай Первую Таблицу
Теперь создай таблицу с названием students.
Выполни:
CREATE TABLE students (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
age INTEGER,
email VARCHAR(150)
);
Это создаёт таблицу с четырьмя колонками:
id;name;age;email.
Разберём это.
id SERIAL PRIMARY KEY
Создаёт автоматически растущий идентификатор.
PostgreSQL автоматически даст каждой строке номер.
name VARCHAR(100) NOT NULL
Создаёт текстовую колонку для имени студента.
NOT NULL означает, что имя обязательно.
Никаких загадочных студентов без имени.
age INTEGER
Создаёт числовую колонку.
email VARCHAR(150)
Создаёт текстовую колонку для email.
Хорошо.
Теперь у нас есть таблица.
Шкаф базы данных получил свой первый ящик.
Очень эмоционально.
Для баз данных.
Покажи Таблицы
Чтобы показать таблицы в текущей базе данных, выполни:
\dt
Ты должен увидеть:
students
Если видишь эту таблицу — хорошо.
Твоя таблица существует.
Если не видишь, проверь:
- подключился ли ты к правильной базе данных?
- закончил ли команду
CREATE TABLEточкой с запятой? - показал ли PostgreSQL ошибку?
PostgreSQL обычно говорит, что пошло не так.
Не всегда мягко.
Но говорит.
Вставь Данные
Теперь добавим студентов.
Выполни:
INSERT INTO students (name, age, email)
VALUES ('Anna', 22, 'anna@example.com');
PostgreSQL должен сказать:
INSERT 0 1
Это означает, что одна строка была вставлена.
Теперь добавь ещё студентов:
INSERT INTO students (name, age, email)
VALUES ('Marco', 28, 'marco@example.com');
INSERT INTO students (name, age, email)
VALUES ('Viktor', 33, 'viktor@example.com');
Теперь у нас есть данные.
Настоящие данные.
Немного данных.
Но достаточно, чтобы база данных почувствовала себя полезной.
Как дать блокноту первую страницу.
Читай Данные через SELECT
Чтобы прочитать всех студентов, выполни:
SELECT * FROM students;
Ты должен увидеть что-то похожее:
id | name | age | email
---+--------+-----+-------------------
1 | Anna | 22 | anna@example.com
2 | Marco | 28 | marco@example.com
3 | Viktor | 33 | viktor@example.com
Это твой первый SQL-запрос.
Разберём его.
SELECT
означает:
Получить данные.
*
означает:
Все колонки.
FROM students
означает:
Из таблицы students.
Итак:
SELECT * FROM students;
означает:
Получить все колонки от всех студентов.
Просто.
Мощно.
Иногда слишком мощно.
В реальных приложениях часто избегают SELECT *, если не нужны все колонки.
Но для обучения это идеально.
Выбери Конкретные Колонки
Можно выбрать только некоторые колонки:
SELECT name, email FROM students;
Результат:
name | email
-------+-------------------
Anna | anna@example.com
Marco | marco@example.com
Viktor| viktor@example.com
Это полезно, когда тебе не нужны все данные.
Может быть, тебе нужны имена и email.
А не возраст.
Поэтому ты просишь только имена и email.
PostgreSQL ценит точные запросы.
Люди тоже.
Обычно.
SQL Keywords
Ты можешь заметить, что SQL keywords пишутся большими буквами:
SELECT * FROM students;
Но это тоже работает:
select * from students;
SQL в основном не чувствителен к регистру для keywords.
Но писать keywords большими буквами делает запросы более читаемыми.
Поэтому в этом курсе мы будем писать:
SELECT
FROM
WHERE
INSERT
UPDATE
DELETE
Это не обязательно.
Но это хорошая привычка.
Хорошие привычки делают будущий debugging менее болезненным.
Не безболезненным.
Менее болезненным.
Точки с Запятой Имеют Значение
В SQL команды обычно заканчиваются точкой с запятой:
SELECT * FROM students;
Если забыть точку с запятой, psql будет ждать продолжения.
Пример:
SELECT * FROM students
После этого prompt может измениться и ждать.
Можно завершить команду, введя:
;
Это классический момент новичка.
Ты думаешь, что PostgreSQL завис.
А он просто ждёт.
Как официант, который не уходит, потому что ты не закончил предложение.
Полезные Команды psql
Вот несколько полезных команд psql:
\l
Показать базы данных.
\c database_name
Подключиться к базе данных.
\dt
Показать таблицы.
\d table_name
Показать структуру таблицы.
Пример:
\d students
\q
Выйти из psql.
Эти команды не являются SQL.
Это специальные команды psql.
Поэтому они начинаются с \.
Backslash — это твоя терминальная волшебная палочка.
Очень маленькая палочка.
Проверь Структуру Таблицы
Выполни:
\d students
Ты должен увидеть структуру таблицы.
Она покажет колонки, типы и ограничения.
Можешь увидеть что-то такое:
id | integer
name | character varying(100)
age | integer
email | character varying(150)
Это помогает проверить таблицу.
Очень полезно, когда забываешь, что создал.
А ты забудешь.
Все забывают.
Базы данных помнят.
Люди делают вид.
Типичные Ошибки
Забыть Точку с Запятой
Неправильно:
SELECT * FROM students
Правильно:
SELECT * FROM students;
SQL-команды обычно требуют ;.
Маленький символ.
Большое значение.
Как последний винт в полке.
Не Подключиться к Правильной Базе
Можно создать таблицу в одной базе, а потом искать её в другой.
Пример:
\c postgres
\dt
Ты можешь не увидеть таблицу students.
Почему?
Потому что ты создал её в:
learning_postgresql
Подключись обратно:
\c learning_postgresql
\dt
Теперь таблица появится.
Базы данных — это отдельные миры.
Не ищи свои носки в доме соседа.
Путать SQL и Команды psql
Это SQL:
SELECT * FROM students;
Это команда psql:
\dt
SQL-команды обычно заканчиваются ;.
Команды psql обычно нет.
Разные инструменты.
Тот же терминал.
Лёгкая путаница.
Нормально.
Забыть Кавычки для Текста
Неправильно:
INSERT INTO students (name, age, email)
VALUES (Anna, 22, anna@example.com);
Правильно:
INSERT INTO students (name, age, email)
VALUES ('Anna', 22, 'anna@example.com');
Текстовые значения требуют одинарных кавычек.
Числа — нет.
PostgreSQL строгий.
Как бухгалтер с клавиатурой.
Практика
Создай новую таблицу с названием books.
Она должна иметь:
id;title;author;year_published.
Пример:
CREATE TABLE books (
id SERIAL PRIMARY KEY,
title VARCHAR(150) NOT NULL,
author VARCHAR(100),
year_published INTEGER
);
Вставь три книги:
INSERT INTO books (title, author, year_published)
VALUES ('Clean Code', 'Robert C. Martin', 2008);
Потом прочитай все книги:
SELECT * FROM books;
Потом прочитай только названия:
SELECT title FROM books;
Это поможет тебе потренировать:
- создание таблиц;
- вставку строк;
- чтение строк;
- выбор колонок.
Практика имеет значение.
PostgreSQL не входит в мозг только через глаза.
Нужны пальцы.
Клавиатура.
Ошибки.
И, возможно, кофе.
Мини-Челлендж
Создай базу данных с названием:
personal_library
Внутри создай таблицу с названием:
books
Таблица должна хранить:
- название книги;
- автора;
- категорию;
- год публикации.
Добавь минимум пять книг.
Потом выполни:
SELECT * FROM books;
Бонус:
Выбери только:
title, author
Это просто.
Но это уже настоящая структура базы данных.
Маленькая база.
Настоящая концепция.
Большой шаг.
Итог
Сегодня ты изучил:
- PostgreSQL хранит данные;
- база данных содержит таблицы;
- таблицы содержат строки и колонки;
- SQL используется для разговора с базами данных;
psqlпозволяет использовать PostgreSQL из терминала;CREATE DATABASEсоздаёт базу данных;\cподключает к базе данных;CREATE TABLEсоздаёт таблицу;INSERT INTOдобавляет данные;SELECTчитает данные;\dtпоказывает таблицы;\d table_nameпоказывает структуру таблицы;- точки с запятой имеют значение.
Это сильное начало.
Теперь у тебя установлен PostgreSQL.
Ты создал базу данных.
Ты создал таблицу.
Ты вставил данные.
Ты выбрал данные.
Это уже основной ритм баз данных:
Создать структуру.
Положить данные внутрь.
Достать данные наружу.
Всё остальное строится на этом.
Очень медленно.
Очень мощно.
Очень PostgreSQL.
Следующий Урок
В следующем уроке мы глубже разберём базы данных и таблицы.
Посмотрим на:
- колонки;
- строки;
- проектирование таблиц;
- названия;
- базовую организацию данных;
- почему структура имеет значение.
Потому что плохой дизайн таблицы — это как беспорядок в гараже.
Сначала кажется, что всё нормально.
Потом однажды тебе нужен один кабель.
И всё падает.