Загрузка данных
ГАЙД: КАК СКАЧАТЬ И РАЗВЕРНУТЬ ДЕМО-БАЗУ "АВИАПЕРЕВОЗКИ"
Официальная страница:
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
Тогда на экзамене будет проще быстро менять шаблоны.