Практики · занятие 1

Установка PostgreSQL. Установка PostGIS. Изучение интерфейсов подключения к БД

О чём это занятие
Разворачиваем рабочее окружение курса с нуля: установка PostgreSQL и PostGIS, создание базы данных, подключение QGIS — и сразу в бой: первая таблица «Продукты» на DDL, наполнение через INSERT и серия SELECT-задач, которые можно решать прямо на этой странице.
Аннотация
Первая половина занятия — инфраструктура: установка PostgreSQL с настройкой суперпользователя и порта, PostGIS через Application Stack Builder, создание базы и активация расширения, подключение QGIS и плагин DB Manager, ограничения PostgreSQL в цифрах. Вторая половина — повторение теории реляционной модели (определения по ГОСТ, множества, кортежи, декартово произведение, таблица соответствий терминов) и практика SQL: уровни DDL, DML и DQL, типы данных PostgreSQL, создание таблицы «Продукты» с первичным ключом, вставка тридцати строк и восемь задач на SELECT и WHERE — от простого вывода до фильтров по диапазонам дат и шаблонам LIKE. Все задачи выполняются в SQL-песочнице с той же таблицей. Завершают занятие два способа импорта готовой базы (psql из консоли и Restore в pgAdmin) и знакомство с демонстрационной базой «Авиаперевозки»: добавление геометрического столбца аэропортам и три запроса с JOIN, агрегацией и подзапросом.
Пререквизиты
Нет — это первое практическое занятие. Теория — лекция 1; подробные определения реляционной модели — экспресс-занятие 2.
Материалы к занятию
Установочные файлы: PostgreSQL для Windows; демо-база «Авиаперевозки» — postgrespro.ru/education/demodb (файл demo_small).

1. Установка PostgreSQL

PostgreSQL — одна из самых популярных и мощных систем управления реляционными базами данных (СУБД). У неё открытый исходный код, плюс она абсолютно бесплатная. Система помогает создавать и хранить базы данных, а также работать с ними на языке SQL.

  1. Скачайте установочный файл с официального сайта PostgreSQL.
  2. Запустите установку и в мастере установки пройдите шаги:
    • 2.1 — начало установки;
    • 2.2 — выберите директорию установки и отметьте галочками компоненты (PostgreSQL Server, pgAdmin 4, Stack Builder, Command Line Tools);
    • 2.3 — укажите данные и задайте пароль для суперпользователя (обычно это postgres). Имя суперпользователя не рекомендуется менять; пароль не рекомендуется забывать;
    • 2.4 — настройте порт для сервера (по умолчанию 5432);
    • 2.5 — проверьте настроенную конфигурацию.
Мастер установки PostgreSQL
Задание пароля суперпользователя
  1. После установки откройте pgAdmin и подключитесь к вашему новому серверу. Уже в этом интерфейсе вы будете создавать базы данных и таблицы и писать SQL-запросы.
pgAdmin: подключение к серверу

1.1. Установка PostGIS

PostGIS — программное расширение с открытым исходным кодом, расширяющее СУБД PostgreSQL до пространственной базы данных: добавляется поддержка пространственных объектов и запросов местоположения в SQL.

  1. Как только PostgreSQL установлен, запустите Application Stack Builder: Пуск → Программы → PostgreSQL → Application Stack Builder.
  2. Выберите в категории Spatial Extensions пункт «PostGIS».
  3. Произведите установку.
Application Stack Builder
Выбор PostGIS в Stack Builder

1.2. Создание БД и активация расширения

  1. Чтобы создать базу данных, достаточно нажать ПКМ по названию сервера.
  2. Затем дайте имя базе данных и назначьте владельца.
  3. Активируйте расширение: раскрыть список БД → Extensions → ПКМ → Create → Extension → в поле Name выбрать «postgis».
  4. Если всё сделано верно, вы увидите PostGIS в списке «Расширений».
Активация расширения PostGIS

1.3. Подключение QGIS

QGIS — географическая информационная система с открытым исходным кодом. Проект зародился в мае 2002 года и был создан как проект на SourceForge в июне того же года. QGIS работает на большинстве платформ Unix, Windows и macOS, разработан с использованием инструментария Qt и C++, работает быстро и имеет приятный, простой в использовании графический интерфейс.

  1. Если всё настроено верно, QGIS должен «увидеть» БД: Слой → Добавить слой → Добавить слой PostGIS.
  2. Во всплывающем окне «создайте» подключение и заполните параметры; разрешите сохранение и загрузку данных.
  3. Введите имя пользователя и пароль для подключения (очень надеемся, что вы их не забыли).
  4. Поскольку данных пока нет, единственное, что можно увидеть, — таблицы без геометрии: поставьте галочку «Показать таблицы без геометрии».
Параметры подключения QGIS

Плагин DB Manager — удобный инструмент для работы с пространственными базами в QGIS (PostGIS, SpatiaLite, GeoPackage, Oracle Spatial в одном интерфейсе): импорт слоёв перетаскиванием, перемещение таблиц между базами. Установка: Модули → Управление модулями → поиск → активировать.

Плагин DB Manager

1.4. Ограничения PostgreSQL

ПараметрОграничение
Размер БДнет ограничения
Размер таблицыдо 32 ТБ
Размер строкидо 1,6 ТБ
Размер полядо 1 ГБ
Количество строк в таблиценет ограничения
Количество столбцов в таблице250–1600 (зависит от типов)
Количество индексовнет ограничения
Длина идентификаторадо 63 байт включительно
Вопросы для самоконтроля Что такое PostgreSQL? Для чего нужен PostGIS? Как активировать расширение PostGIS в pgAdmin? Как осуществляется подключение QGIS к БД? Какой плагин позволяет упростить работу с БД в QGIS? (Ответы — в разделах выше и во флеш-картах в конце страницы.)

2. Определения понятий реляционной модели

Прежде чем создавать таблицы, повторим фундамент (подробный разбор — в экспресс-занятии 2 и лекции 1).

Информация — любой вид знаний о предметах, фактах, понятиях проблемной области, которыми обмениваются пользователи информационной системы (ГОСТ 34.320-96); сведения (сообщения, данные) независимо от формы их представления (Федеральный закон № 149-ФЗ «Об информации, информационных технологиях и о защите информации»).

Данные — представление информации в формализованном виде, пригодном для передачи, интерпретации или обработки (ГОСТ 33707-2016); формы представления информации, с которыми имеют дело информационные системы и их пользователи (ГОСТ Р ИСО/МЭК 10746-2-2000).

Все типы данных делятся на две категории: скалярные (простые) и составные. Множество хранит данные без определённого порядка и без повторяющихся значений; особенность — высокая скорость проверки принадлежности элемента. Кортеж — упорядоченный набор фиксированной длины. Мощность множества |A| — количество его элементов. Декартово произведение A × B — множество всех упорядоченных пар элементов исходных множеств.

Мостик от теории множеств к базе данных:

ТерминОписание
Реляционная модель данныхтабличное представление
Отношениереляционная таблица
Атрибутимя столбца
Кортежстрока реляционной таблицы
Доменмножество допустимых значений для столбца
Степень отношениячисло столбцов реляционной таблицы
Мощность отношениячисло строк реляционной таблицы
Реляционная база данныхсовокупность взаимосвязанных таблиц

SQL (Structured Query Language) — язык программирования, основанный на реляционной модели данных. SQL расширяет идеи реляционной алгебры и считается полным языком: помимо операций запросов у него есть операторы DDL (описание данных) и операторы административного управления базами данных.

3. DDL: создаём свою первую таблицу

Операторы DDL используются для создания, изменения и удаления структуры базы данных и её объектов. Основные типы данных PostgreSQL:

ИмяПсевдонимыОписание
bigintint8знаковое целое из 8 байт
bigserialserial8восьмибайтное целое с автоувеличением
booleanboolлогическое значение (true/false)
character [(n)]char [(n)]символьная строка фиксированной длины
character varying [(n)]varchar [(n)]символьная строка переменной длины
dateкалендарная дата (год, месяц, день)
integerint, int4знаковое четырёхбайтное целое
interval [поля] [(p)]интервал времени
moneyденежная сумма
numeric [(p, s)]decimal [(p, s)]вещественное число заданной точности
realfloat4число одинарной точности с плавающей точкой (4 байта)
textсимвольная строка переменной длины

Создадим первую таблицу. В pgAdmin раскройте Schemas, найдите Tables, нажмите ПКМ → Query Tool и выполните:

CREATE TABLE Продукты (
    ID INT PRIMARY KEY,
    Наименование VARCHAR(50),
    Количество INT,
    Цена MONEY,
    Дата_привоза DATE
);
Внимание Не забудьте нажать кнопку «Выполнить» — ОДИН раз! Повторное выполнение CREATE TABLE завершится ошибкой «таблица уже существует».
Query Tool: создание таблицы

3.1. DML: наполняем таблицу

Операторы DML позволяют работать с данными внутри таблицы: INSERT, UPDATE, DELETE. Вставим тридцать продуктов:

INSERT INTO Продукты (ID, Наименование, Количество, Цена, Дата_привоза) VALUES
(1, 'Рябчики', 100, 45, '2024-10-01'),
(2, 'Ананас', 200, 95, '2024-10-02'),
(3, 'Яблоко', 150, 30, '2024-10-03'),
(4, 'Груша', 120, 40, '2024-10-04'),
(5, 'Киви', 80, 50, '2024-10-05'),
(6, 'Банан', 300, 25, '2024-10-06'),
(7, 'Мандарины', 200, 65, '2024-10-07'),
(8, 'Апельсин', 250, 70, '2024-10-08'),
(9, 'Арбуз', 400, 15, '2024-10-09'),
(10, 'Дыня', 180, 85, '2024-10-10'),
(11, 'Виноград', 130, 75, '2024-10-11'),
(12, 'Клубника', 220, 120, '2024-10-12'),
(13, 'Черешня', 140, 110, '2024-10-13'),
(14, 'Персик', 160, 95, '2024-10-14'),
(15, 'Нектарин', 180, 105, '2024-10-15'),
(16, 'Слива', 190, 60, '2024-10-16'),
(17, 'Абрикос', 170, 55, '2024-10-17'),
(18, 'Манго', 100, 140, '2024-10-18'),
(19, 'Лайм', 90, 75, '2024-10-19'),
(20, 'Лимон', 120, 80, '2024-10-20'),
(21, 'Гранат', 130, 115, '2024-10-21'),
(22, 'Авокадо', 80, 150, '2024-10-22'),
(23, 'Кокос', 60, 160, '2024-10-23'),
(24, 'Финики', 110, 135, '2024-10-24'),
(25, 'Инжир', 140, 145, '2024-10-25'),
(26, 'Папайя', 100, 155, '2024-10-26'),
(27, 'Маракуйя', 70, 165, '2024-10-27'),
(28, 'Личи', 90, 175, '2024-10-28'),
(29, 'Рамбутан', 85, 185, '2024-10-29'),
(30, 'Саподилла', 75, 195, '2024-10-30');

3.2. DQL: извлекаем данные

DQL (Data Query Language) — набор команд SQL для выполнения запросов к базе данных с целью извлечения данных. Цель DQL — получение информации, а не изменение структуры или содержимого. Основная команда — SELECT:

SELECT Столбец1, Столбец2, Столбец3
FROM Таблица1;

WHERE фильтрует строки. Условия могут включать:

  1. сравнения: =, != (не равно), >, <, >=, <= (например, age > 18, name = 'John');
  2. логические операторы AND, OR, NOT для комбинирования условий;
  3. IN и NOT IN — проверка на вхождение значения в список;
  4. NULL и NOT NULL — проверка на наличие или отсутствие значений NULL;
  5. выражения с функциями и арифметикой (например, price * quantity > 100).

4. Практика SELECT: задачи и песочница

Таблица «Продукты» уже загружена в песочницу — все 30 строк. Решайте задачи из практики самостоятельно, затем сверяйтесь с решением. Даты в формате ISO ('2024-10-05') корректно сравниваются операторами >= и <=.

SQL-песочница · таблица Продукты
Схема: Продукты(ID, Наименование, Количество, Цена, Дата_привоза) · 30 строк
Задача 1

Выведите всю таблицу.

показать решение
SELECT * FROM Продукты;
Задача 2

Выберите название товара и дату привоза.

показать решение
SELECT Наименование, Дата_привоза FROM Продукты;
Задача 3

Выведите названия товаров, которых больше 100.

показать решение
SELECT Наименование FROM Продукты
WHERE Количество > 100;

В песочнице — 17 строк.

Задача 4

Выведите названия товаров, которые пришли с 2024-10-03 по 2024-10-30.

показать решение
SELECT Наименование FROM Продукты
WHERE Дата_привоза >= '2024-10-03' AND Дата_привоза <= '2024-10-30';

Обратите внимание на порядок границ: если написать «с 30-го по 3-е», условие не выполнится ни для одной строки — нижняя граница диапазона должна быть меньше верхней.

Задача 5

Выведите название товара и стоимость (количество × цена).

показать решение
SELECT Наименование, Количество * Цена AS Стоимость
FROM Продукты;
Задача 6

Выведите продукты на букву Р.

показать решение
SELECT * FROM Продукты
WHERE Наименование LIKE 'Р%';

Рябчики и Рамбутан. Шаблон 'Р%' — «начинается с Р»; в PostgreSQL LIKE чувствителен к регистру.

Задача 7

Выведите товары в диапазоне цен от 100 до 200, не полученные с 2024-10-06 по 2024-10-10.

показать решение
SELECT * FROM Продукты
WHERE Цена >= 100 AND Цена <= 200
  AND NOT (Дата_привоза >= '2024-10-06' AND Дата_привоза <= '2024-10-10');
Задача 8

Выведите товары, заканчивающиеся на букву «я».

показать решение
SELECT * FROM Продукты
WHERE Наименование LIKE '%я';

Черешня, Папайя, Маракуйя, Саподилла… проверьте себя в песочнице — Дыня и Клубника тоже подойдут.

5. Импорт готовой БД

5.1. Через консоль (psql)

  1. Найдите место на диске, где установлен PostgreSQL: если вы не меняли путь установки, ищите на диске C, примерный путь — C:\Program Files\PostgreSQL\15\bin (15 — номер вашей версии).
  2. Откройте данную директорию в командной строке: в адресной строке Проводника вместо пути введите cmd и нажмите Enter. Альтернатива для продвинутых пользователей — команда cd.
  3. Импорт БД осуществляется командой:
    psql -f demo_small_YYYYMMDD.sql -U postgres
    где -f (file) — путь к файлу с данными, -U (User) — пользователь, от имени которого вы действуете.
Примечание Дорогие пользователи! Не рекомендуется заменять f на F — ключи командной строки чувствительны к регистру.
Импорт базы через psql

5.2. Через интерфейс pgAdmin

  1. Нажмите ПКМ по существующей БД.
  2. Нажмите кнопку Restore (восстановить) во всплывшем окне.
  3. Выберите в пункте Filename нужный файл.
  4. Если проблем не возникло, процесс завершится со статусом Finished, в противном случае — Failed. В случае возникновения проблем воспользуйтесь загрузкой через консоль.
Restore в pgAdmin

6. Демо-база «Авиаперевозки»: схема и запросы

Схема демонстрационной базы bookings знакома по лекции 2 — бронирования, билеты, перелёты, рейсы, аэропорты, самолёты и места.

Схема демонстрационной базы Авиаперевозки

QGIS не может отобразить данные, если отсутствуют координаты и информация о проекции. Создадим столбец geom с системой координат 4326 и заполним его точками из полей координат:

ALTER TABLE bookings.airports_data
ADD COLUMN geom geometry(Point, 4326);

UPDATE bookings.airports_data
SET geom = ST_SetSRID(
    ST_MakePoint(
        coordinates[0],  -- долгота
        coordinates[1]   -- широта
    ), 4326);

Теперь аэропорты можно отобразить в QGIS: включите «поле геометрии», выберите столбец geom и загрузите данные как слой.

Аэропорты на карте QGIS

Три запроса для самостоятельного разбора (демонстрируют JOIN, агрегатные функции с группировкой и подзапрос):

-- 1. Места Sukhoi Superjet-100 (JOIN + JSON-доступ к полю model)
SELECT a.aircraft_code,
       a.model->>'en' AS model_en,
       a.model->>'ru' AS model_ru,
       s.seat_no, s.fare_conditions
FROM bookings.aircrafts_data a
JOIN bookings.seats s ON a.aircraft_code = s.aircraft_code
WHERE a.model->>'en' = 'Sukhoi Superjet-100'
ORDER BY s.seat_no;

-- 2. Компоновка салонов: классы обслуживания и число мест по самолётам
SELECT s2.aircraft_code,
       string_agg(s2.fare_conditions || '(' || s2.num::text || ')', ', ') AS fare_conditions
FROM (
    SELECT s.aircraft_code, s.fare_conditions, count(*) AS num
    FROM bookings.seats s
    GROUP BY s.aircraft_code, s.fare_conditions
    ORDER BY s.aircraft_code, s.fare_conditions
) s2
GROUP BY s2.aircraft_code
ORDER BY s2.aircraft_code;

-- 3. Города с несколькими аэропортами (подзапрос + HAVING)
SELECT a.airport_code AS code, a.airport_name, a.city,
       a.coordinates[0] AS longitude,
       a.coordinates[1] AS latitude,
       a.timezone
FROM bookings.airports_data a
WHERE a.city IN (
    SELECT aa.city
    FROM bookings.airports_data aa
    GROUP BY aa.city
    HAVING COUNT(*) > 1
)
ORDER BY a.city, a.airport_code;

Контрольные вопросы

Источники

  1. PostgreSQL: Windows installers : [сайт]. — URL: https://www.postgresql.org/download/windows/ (дата обращения: 18.08.2026).
  2. PostgreSQL 15 Documentation. Data Types : [сайт]. — URL: https://www.postgresql.org/docs/15/datatype.html (дата обращения: 18.08.2026).
  3. Демобаза данных «Авиаперевозки» — Postgres Professional : [сайт]. — URL: https://postgrespro.ru/education/demodb (дата обращения: 18.08.2026).
  4. PostGIS. Getting Started : [сайт]. — URL: https://postgis.net/documentation/getting_started/ (дата обращения: 18.08.2026).