Загрузка данных


ГАЙД: КАК СКАЧАТЬ И РАЗВЕРНУТЬ ДЕМО-БАЗУ "АВИАПЕРЕВОЗКИ"

Официальная страница:
https://postgrespro.ru/education/demodb

На этой странице лежит учебная демонстрационная база PostgreSQL.
Она может называться demo database или база "Авиаперевозки".

Важно:
На сайте может быть новая версия базы.
В новой версии некоторые названия могут отличаться от старых лабораторных.
Например aircrafts может называться airplanes.
Если какой-то запрос не работает, сначала проверь реальные таблицы и поля в базе.


1. КАКОЙ ФАЙЛ СКАЧИВАТЬ

Для экзамена лучше скачать маленькую версию базы.
Обычно она называется примерно так:

demo-20250901-3m.sql.gz

3m означает маленькая версия.
Она быстрее скачивается и быстрее разворачивается.

Если на сайте есть несколько вариантов:
- 3m - маленькая база, обычно хватает для учебы
- medium или big - больше данных, дольше разворачивается

Скачай файл .sql.gz.
Потом распакуй его через 7-Zip или WinRAR.
После распаковки должен получиться файл .sql.

Пример:
demo-20250901-3m.sql.gz
после распаковки:
demo-20250901-3m.sql


2. ВАРИАНТ 1: РАЗВЕРНУТЬ ЧЕРЕЗ POWERSHELL И psql

Этот способ надежнее для больших SQL-файлов.
pgAdmin иногда может зависнуть на большом файле, а psql обычно нормально выполняет такие скрипты.

Шаг 1.
Открой PowerShell.

Шаг 2.
Перейди в папку bin установленного PostgreSQL.

Примеры:

cd "C:\Program Files\PostgreSQL\16\bin"

или

cd "C:\Program Files\PostgreSQL\15\bin"

или

cd "C:\Program Files\PostgreSQL\17\bin"

Версия зависит от того, какой PostgreSQL установлен.

Шаг 3.
Запусти SQL-файл через psql.

Пример:

.\psql.exe -U postgres -f "C:\Users\ТВОЙ_ПОЛЬЗОВАТЕЛЬ\Downloads\demo-20250901-3m.sql"

Что менять:
- postgres - имя пользователя PostgreSQL, обычно postgres
- путь к файлу - путь к распакованному .sql файлу

Шаг 4.
Введи пароль от пользователя postgres.

Шаг 5.
Дождись окончания выполнения.
Если все нормально, в pgAdmin появится база demo.

Важно:
Скрипт демобазы может сам удалить старую базу demo и создать новую.
Если в старой demo были нужные данные, заранее сохрани их.


3. ВАРИАНТ 2: РАЗВЕРНУТЬ ЧЕРЕЗ pgAdmin

Этот способ проще визуально, но может быть хуже для больших файлов.
Если файл маленький, можно попробовать.

ВАРИАНТ 2.1: через Query Tool

Шаг 1.
Открой pgAdmin.

Шаг 2.
Подключись к серверу PostgreSQL.

Шаг 3.
Открой любую существующую базу, например postgres.

Шаг 4.
Нажми Query Tool.

Шаг 5.
Открой SQL-файл:
File -> Open File

Выбери распакованный файл:
demo-20250901-3m.sql

Шаг 6.
Нажми Execute.

Шаг 7.
Жди, пока скрипт выполнится.
Это может занять время.

Шаг 8.
После выполнения обнови список баз данных:
правой кнопкой по Databases -> Refresh.

Должна появиться база demo.

Если Query Tool зависает:
лучше использовать вариант через PowerShell и psql.


ВАРИАНТ 2.2: через psql Tool внутри pgAdmin

В некоторых версиях pgAdmin есть инструмент PSQL Tool.

Шаг 1.
Открой pgAdmin.

Шаг 2.
Нажми Tools -> PSQL Tool.

Шаг 3.
Выбери сервер и базу, например postgres.

Шаг 4.
В открывшейся консоли psql выполни:

\i 'C:/Users/ТВОЙ_ПОЛЬЗОВАТЕЛЬ/Downloads/demo-20250901-3m.sql'

Важно:
В psql лучше писать путь через обычные слеши /.

Пример:

\i 'C:/Users/ivan/Downloads/demo-20250901-3m.sql'

Шаг 5.
Дождись окончания выполнения.

Шаг 6.
Обнови список баз в pgAdmin.


4. ВАРИАНТ 3: РАЗВЕРНУТЬ ЧЕРЕЗ SQL Shell (psql)

Это не PowerShell.
Это отдельная консоль PostgreSQL.
В Windows она может называться:
SQL Shell (psql)

Этот вариант удобен, если PowerShell искать не хочется.

Шаг 1.
Открой меню Пуск.

Шаг 2.
Найди:
SQL Shell (psql)

Шаг 3.
Открой ее.

Шаг 4.
SQL Shell начнет спрашивать параметры подключения.
Обычно можно нажимать Enter, если подходят значения по умолчанию.

Примерно будет так:

Server [localhost]:
Database [postgres]:
Port [5432]:
Username [postgres]:
Password for user postgres:

Что вводить:
- Server - обычно localhost
- Database - можно postgres
- Port - обычно 5432
- Username - обычно postgres
- Password - пароль от PostgreSQL

Шаг 5.
Когда подключение прошло, появится приглашение примерно такое:

postgres=#

Это значит, что ты уже внутри psql.

Шаг 6.
Выполни SQL-файл командой:

\i 'C:/Users/ТВОЙ_ПОЛЬЗОВАТЕЛЬ/Downloads/demo-20250901-3m.sql'

Важно:
В SQL Shell лучше писать путь через обычные слеши /, а не через обратные \.

Пример:

\i 'C:/Users/ivan/Downloads/demo-20250901-3m.sql'

Шаг 7.
Дождись окончания выполнения.
Если файл большой, это может занять время.

Шаг 8.
Открой pgAdmin и обнови список баз:
Databases -> Refresh

Должна появиться база demo.

Если команда \i пишет, что файл не найден:
- проверь путь к файлу
- проверь, что файл уже распакован и имеет расширение .sql
- попробуй положить файл в простой путь, например C:/demo/demo.sql


5. КАК ПРОВЕРИТЬ, ЧТО БАЗА УСТАНОВИЛАСЬ

Открой Query Tool в базе demo.

Сначала посмотри схемы:

SELECT schema_name
FROM information_schema.schemata
ORDER BY schema_name;

Потом посмотри таблицы:

SELECT table_schema, table_name
FROM information_schema.tables
WHERE table_schema NOT IN ('pg_catalog', 'information_schema')
ORDER BY table_schema, table_name;

Если таблицы лежат в схеме bookings, это нормально.
В старой базе часто была схема bookings.

Проверь основные таблицы:

SELECT *
FROM bookings.flights
LIMIT 10;

Если ошибка, попробуй без схемы:

SELECT *
FROM flights
LIMIT 10;


6. КАК ПОСМОТРЕТЬ ПОЛЯ ТАБЛИЦЫ

Если не знаешь, какие поля есть в таблице flights:

SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'flights'
ORDER BY ordinal_position;

Если нужно точно с учетом схемы:

SELECT column_name, data_type
FROM information_schema.columns
WHERE table_schema = 'bookings'
  AND table_name = 'flights'
ORDER BY ordinal_position;


7. ЕСЛИ НАЗВАНИЯ ТАБЛИЦ ОТЛИЧАЮТСЯ

В старых лабораторных могли быть:
aircrafts
airports

В новой версии могут быть:
airplanes
airports
или таблицы с суффиксом _data.

Чтобы найти похожие таблицы:

SELECT table_schema, table_name
FROM information_schema.tables
WHERE table_name ILIKE '%air%'
ORDER BY table_schema, table_name;

Чтобы найти поля, связанные с самолетами:

SELECT table_schema, table_name, column_name, data_type
FROM information_schema.columns
WHERE column_name ILIKE '%aircraft%'
   OR column_name ILIKE '%airplane%'
ORDER BY table_schema, table_name, column_name;

Чтобы найти поля, связанные с аэропортами:

SELECT table_schema, table_name, column_name, data_type
FROM information_schema.columns
WHERE column_name ILIKE '%airport%'
ORDER BY table_schema, table_name, column_name;


8. ЕСЛИ airports И aircrafts НЕ РАБОТАЮТ

Если запрос:

SELECT *
FROM airports
LIMIT 10;

выдает ошибку, попробуй:

SELECT *
FROM airports_data
LIMIT 10;

Если запрос:

SELECT *
FROM aircrafts
LIMIT 10;

выдает ошибку, попробуй:

SELECT *
FROM aircrafts_data
LIMIT 10;

или:

SELECT *
FROM airplanes
LIMIT 10;


9. ЕСЛИ ПОЛЯ ХРАНЯТСЯ КАК JSON

В некоторых версиях базы названия аэропортов, городов и моделей самолетов хранятся как JSON.

Например:
city
airport_name
model

Тогда для русского текста используй:

city ->> 'ru'
airport_name ->> 'ru'
model ->> 'ru'

Пример:

SELECT
    airport_code,
    airport_name ->> 'ru' AS airport_name,
    city ->> 'ru' AS city
FROM airports_data
WHERE city ->> 'ru' = 'Москва';


10. ЧТО ДЕЛАТЬ, ЕСЛИ ЗАПРОС ВЕРНУЛ ПУСТО

Пустой результат не всегда ошибка.

Возможные причины:
- в этой версии базы нет такой даты
- нет такого города
- нет такого статуса рейса
- условие слишком строгое
- таблица другая по версии

Что проверить:

Посмотреть несколько строк таблицы:

SELECT *
FROM flights
LIMIT 20;

Посмотреть разные статусы:

SELECT DISTINCT status
FROM flights
ORDER BY status;

Посмотреть диапазон дат:

SELECT
    min(scheduled_departure),
    max(scheduled_departure)
FROM flights;


11. ЧТО ДЕЛАТЬ, ЕСЛИ ОШИБКА relation does not exist

Это значит, что таблица или представление не найдено.

Проверь список таблиц:

SELECT table_schema, table_name
FROM information_schema.tables
WHERE table_schema NOT IN ('pg_catalog', 'information_schema')
ORDER BY table_schema, table_name;

Если таблица есть в схеме bookings, надо писать так:

SELECT *
FROM bookings.flights
LIMIT 10;

или настроить search_path:

SET search_path = bookings, public;

После этого можно писать:

SELECT *
FROM flights
LIMIT 10;


12. ЧТО ДЕЛАТЬ, ЕСЛИ ОШИБКА column does not exist

Это значит, что поля с таким названием нет.

Проверь поля таблицы:

SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'flights'
ORDER BY ordinal_position;

Если используешь псевдоним таблицы, например:

FROM flights f

то поле надо писать так:

f.flight_id

а не:

flights.flight_id


13. МИНИ-ПРОВЕРКА ПОСЛЕ УСТАНОВКИ

Выполни:

SELECT count(*)
FROM flights;

или если схема bookings:

SELECT count(*)
FROM bookings.flights;

Потом:

SELECT count(*)
FROM tickets;

или:

SELECT count(*)
FROM bookings.tickets;

Если count возвращает число, значит таблицы читаются нормально.


14. КАК ПОНЯТЬ, СТАРАЯ ИЛИ НОВАЯ ВЕРСИЯ БАЗЫ

Выполни:

SELECT table_schema, table_name
FROM information_schema.tables
WHERE table_name IN ('aircrafts', 'aircrafts_data', 'airplanes', 'airports', 'airports_data')
ORDER BY table_schema, table_name;

Если есть aircrafts или aircrafts_data - база похожа на старую учебную.
Если есть airplanes - база новая.

Логика запросов почти такая же, но названия таблиц надо подставлять реальные.


15. ЧТО ЛУЧШЕ ДЛЯ ЭКЗАМЕНА

Лучше заранее развернуть базу до экзамена и проверить:
- какие схемы есть
- как называются таблицы
- есть ли flights, tickets, ticket_flights, bookings, boarding_passes
- aircrafts или airplanes
- airports или airports_data
- какие даты есть в flights и bookings

Тогда на экзамене будет проще быстро менять шаблоны.