PurpleSchool — курсы программирования онлайн
  • Пути
    • Frontend React разработчик
    • Frontend Vue разработчик
    • Backend разработчик Node.js
    • Fullstack разработчик React / Node.js
    • Mobile разработчик React Native
    • Backend разработчик Golang
    • Devops инженер
    • Backend разработчик Python
  • AI для кодаНовое
  • О нас
    • Отзывы
    • Реферальная программа
    • О компании
    • Контакты
  • Иконка открытия меню
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
PurpleSchool — платформа бесплатных roadmap и курсов для разработчиков
ютуб иконка
Telegram иконка
VK иконка
VK иконка
Курсы
ГлавнаяКаталог курсовFrontendBackendFullstack
Практика
КарьераПроектыPurpleПлюс
Материалы
БлогБаза знаний
Документы
Договор офертаПолитика конфиденциальностиПроверка сертификатаМиграция курсовРеферальная программа
Реквизиты
ИП Ларичев Антон АндреевичИНН 773373765379contact@purpleschool.ru

PurpleSchool © 2020 -2026 Все права защищены

  • Курсы
    • FrontendИконка стрелки
    • AI разработкаИконка стрелки
    • BackendИконка стрелки
    • DevOpsИконка стрелки
    • MobileИконка стрелки
    • ТестированиеИконка стрелки
    • Soft-skillsИконка стрелки
    • ДизайнИконка стрелки
    Иконка слояПерейти в каталог курсов
  • Бесплатно
    • Курсы
    • JavaScript Основы разработкиPython Основы PythonCSS CSS FlexboxКарта развитияВопросы для собеседований
    • База знанийИконка стрелки
    • Новостные рассылкиИконка стрелки
  • PurpleSchool — курсы программирования онлайн
    • AI для кодаНовое
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
    Главная
    Сообщество
    PostgreSQL для начинающих: создаём базу и пишем первые запросы

    PostgreSQL для начинающих: создаём базу и пишем первые запросы

    Аватар автора PostgreSQL для начинающих: создаём базу и пишем первые запросы

    Антон Ларичев

    Иконка календаря20 мая 2026
    PostgreSQLSQLБазы данныхjuniorИконка уровня junior
    Картинка поста PostgreSQL для начинающих: создаём базу и пишем первые запросы

    Введение

    PostgreSQL — это мощная объектно-реляционная система управления базами данных с открытым исходным кодом. Она используется в продакшене крупными компаниями благодаря надёжности, расширяемости и поддержке стандарта SQL. В этой статье разберём, как установить PostgreSQL, создать свою первую базу данных, спроектировать таблицы и научиться писать запросы для работы с данными.

    Установка и подключение

    После установки PostgreSQL подключиться к серверу можно через консольный клиент psql. По умолчанию создаётся пользователь postgres — суперпользователь с полными правами.

    # Подключение к серверу под пользователем postgres
    psql -U postgres -h localhost
    

    Внутри psql доступны служебные команды, начинающиеся с обратного слеша. Они помогают ориентироваться в базе данных.

    -- Список всех баз данных на сервере
    \l
    
    -- Список таблиц в текущей базе
    \dt
    
    -- Подключение к конкретной базе
    \c myblog
    
    -- Выйти из psql
    \q
    

    Создание базы данных

    База данных — это контейнер для таблиц, индексов и других объектов. Создадим базу для учебного проекта блога.

    -- Создаём базу данных с указанием владельца и кодировки
    CREATE DATABASE myblog
      WITH OWNER = postgres
           ENCODING = 'UTF8'
           LC_COLLATE = 'ru_RU.UTF-8'
           LC_CTYPE = 'ru_RU.UTF-8';
    

    После создания подключаемся к новой базе командой \c myblog. Теперь все DDL и DML-операции будут выполняться в её контексте.

    Проектирование таблиц

    Таблицы описывают сущности предметной области. Для блога нам понадобятся пользователи и статьи. Связь между ними — один ко многим: у одного автора много статей.

    -- Таблица пользователей с автоинкрементным id
    CREATE TABLE users (
      id SERIAL PRIMARY KEY,
      email VARCHAR(255) UNIQUE NOT NULL,
      name VARCHAR(100) NOT NULL,
      created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );
    
    -- Таблица статей со ссылкой на автора
    CREATE TABLE articles (
      id SERIAL PRIMARY KEY,
      user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
      title VARCHAR(200) NOT NULL,
      content TEXT,
      published BOOLEAN DEFAULT FALSE,
      created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );
    

    Ключ REFERENCES создаёт внешний ключ — гарантию ссылочной целостности. Опция ON DELETE CASCADE удалит все статьи пользователя при удалении самого пользователя.

    Типы данных

    PostgreSQL предлагает богатый набор типов: INTEGER, BIGINT, NUMERIC для чисел, VARCHAR и TEXT для строк, BOOLEAN для логических значений, TIMESTAMP и DATE для дат. Для JSON-данных есть отдельный тип JSONB с поддержкой индексов.

    Вставка данных

    Добавим тестовые записи. Оператор INSERT поддерживает указание возвращаемых значений через RETURNING.

    -- Создаём пользователя и сразу получаем его id
    INSERT INTO users (email, name)
    VALUES ('anna@example.com', 'Анна')
    RETURNING id;
    
    -- Пакетная вставка статей
    INSERT INTO articles (user_id, title, content, published) VALUES
      (1, 'Первая статья', 'Текст про SQL', TRUE),
      (1, 'Черновик', 'Пока не готово', FALSE),
      (1, 'Вторая статья', 'Текст про индексы', TRUE);
    

    Выборка данных

    Основа работы с базой — оператор SELECT. Он позволяет фильтровать, сортировать и агрегировать данные.

    -- Получаем опубликованные статьи, сортируем по дате
    SELECT id, title, created_at
    FROM articles
    WHERE published = TRUE
    ORDER BY created_at DESC
    LIMIT 10;
    

    Для получения данных из нескольких таблиц используют JOIN. Самый частый — INNER JOIN, который возвращает только совпадающие записи.

    -- Получаем статьи вместе с именами авторов
    SELECT a.title, u.name AS author, a.created_at
    FROM articles a
    INNER JOIN users u ON u.id = a.user_id
    WHERE a.published = TRUE;
    

    Агрегация

    Функции COUNT, SUM, AVG, MAX, MIN вместе с GROUP BY дают сводную статистику.

    -- Считаем количество опубликованных статей у каждого автора
    SELECT u.name, COUNT(a.id) AS articles_count
    FROM users u
    LEFT JOIN articles a ON a.user_id = u.id AND a.published = TRUE
    GROUP BY u.id, u.name
    HAVING COUNT(a.id) > 0
    ORDER BY articles_count DESC;
    

    LEFT JOIN сохраняет пользователей даже без статей, а HAVING фильтрует уже агрегированные результаты.

    Обновление и удаление

    Изменение данных требует осторожности — забытое условие WHERE приведёт к катастрофе.

    -- Публикуем конкретный черновик
    UPDATE articles
    SET published = TRUE, created_at = CURRENT_TIMESTAMP
    WHERE id = 2;
    
    -- Удаляем старые неопубликованные черновики
    DELETE FROM articles
    WHERE published = FALSE
      AND created_at < NOW() - INTERVAL '30 days';
    

    Индексы для скорости

    Индексы ускоряют поиск, но замедляют вставку. Создавайте их на колонках, которые часто фигурируют в WHERE и JOIN.

    -- Индекс для быстрого поиска статей автора
    CREATE INDEX idx_articles_user_id ON articles(user_id);
    
    -- Составной индекс для частого фильтра
    CREATE INDEX idx_articles_published_date
      ON articles(published, created_at DESC);
    

    Частые ошибки

    Забытый WHERE в UPDATE и DELETE. Запускайте сначала аналогичный SELECT с тем же условием, чтобы убедиться в правильности выборки.

    Использование SELECT * в продакшене. Явно перечисляйте нужные колонки — это уменьшает трафик и защищает код от изменений схемы.

    Сравнение с NULL через =. Значение NULL не равно ничему, даже самому себе. Используйте IS NULL и IS NOT NULL.

    Игнорирование транзакций. Связанные изменения оборачивайте в BEGIN ... COMMIT, чтобы при сбое откатить все операции через ROLLBACK.

    Хранение паролей в открытом виде. Применяйте расширение pgcrypto или хешируйте пароли на стороне приложения с помощью bcrypt.

    Заключение

    Мы прошли путь от установки PostgreSQL до написания запросов с join и агрегацией. Освоенных команд достаточно, чтобы построить бэкенд для небольшого приложения. Дальше изучайте транзакции, оконные функции, CTE и работу с JSONB — это инструменты, которые отличают уверенного разработчика от новичка. Практикуйтесь на реальных данных, читайте план выполнения через EXPLAIN ANALYZE и не бойтесь экспериментировать в тестовой базе.

    Иконка глаза805

    Комментарии

    0

    Постройте личный план изучения Основы React, React Router и Redux Toolkit до уровня Middle — бесплатно!

    Основы React, React Router и Redux Toolkit — часть карты развития Frontend, Mobile

    • step100+ шагов развития
    • lessons30 бесплатных лекций
    • lessons300 бонусных рублей на счет

    Бесплатные лекции

    Лучшие курсы по теме

    изображение курса

    Zustand

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.8
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    Next.js - с нуля

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.7
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    Feature-Sliced Design

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.5
    3 999 ₽ 6 990 ₽
    Подробнее

    Похожие статьи

    Картинка поста PostgreSQL vs MySQL: что выбрать для проекта
    Иконка аватараАнтон
    Иконка календаря13 августа 2026
    PostgreSQLMySQLбазы данных+ 3middleИконка уровня middle

    PostgreSQL vs MySQL: что выбрать для проекта

    PostgreSQL vs MySQL — сравниваем архитектуру, производительность, типы данных и транзакции, чтобы выбрать подходящую БД для вашего проекта.

    Иконка чипа0
    Иконка глаза128
    Иконка комментариев0
    Картинка поста SQL запросы: примеры для начинающих разработчиков
    Иконка аватараАнтон
    Иконка календаря20 июля 2026
    SQLбазы данныхMySQL+ 2juniorИконка уровня junior

    SQL запросы: примеры для начинающих разработчиков

    SQL-запросы — основа работы с базами данных. Разбираем SELECT, INSERT, UPDATE, DELETE и JOIN с примерами и объяснением частых ошибок.

    Иконка чипа0
    Иконка глаза799
    Иконка комментариев0
    Картинка поста Индексы в PostgreSQL: типы, применение и подводные камни
    Иконка аватараАнтон
    Иконка календаря05 июля 2026
    PostgreSQLбазы данныхиндексы+ 3middleИконка уровня middle

    Индексы в PostgreSQL: типы, применение и подводные камни

    Разбираем все типы индексов PostgreSQL: B-Tree, Hash, GIN, GiST, BRIN. Когда и какой индекс выбрать, чтобы ускорить запросы и не замедлить запись.

    Иконка чипа0
    Иконка глаза687
    Иконка комментариев0
    Иконка чипа0