diff --git a/README.md b/README.md index e69de29..1ff970f 100644 --- a/README.md +++ b/README.md @@ -0,0 +1 @@ +[Course link](https://lms.itmo.ru/course/view.php?id=623) diff --git a/labs/lab1/assets/1.png b/labs/lab1/assets/1.png new file mode 100644 index 0000000..a4535f2 Binary files /dev/null and b/labs/lab1/assets/1.png differ diff --git a/labs/lab1/assets/10.png b/labs/lab1/assets/10.png new file mode 100644 index 0000000..48e6d41 Binary files /dev/null and b/labs/lab1/assets/10.png differ diff --git a/labs/lab1/assets/11.png b/labs/lab1/assets/11.png new file mode 100644 index 0000000..eb1a2e8 Binary files /dev/null and b/labs/lab1/assets/11.png differ diff --git a/labs/lab1/assets/12.png b/labs/lab1/assets/12.png new file mode 100644 index 0000000..d4a1b37 Binary files /dev/null and b/labs/lab1/assets/12.png differ diff --git a/labs/lab1/assets/13.png b/labs/lab1/assets/13.png new file mode 100644 index 0000000..0075620 Binary files /dev/null and b/labs/lab1/assets/13.png differ diff --git a/labs/lab1/assets/14.png b/labs/lab1/assets/14.png new file mode 100644 index 0000000..7170d0c Binary files /dev/null and b/labs/lab1/assets/14.png differ diff --git a/labs/lab1/assets/15.png b/labs/lab1/assets/15.png new file mode 100644 index 0000000..8436cbc Binary files /dev/null and b/labs/lab1/assets/15.png differ diff --git a/labs/lab1/assets/16.png b/labs/lab1/assets/16.png new file mode 100644 index 0000000..217d2af Binary files /dev/null and b/labs/lab1/assets/16.png differ diff --git a/labs/lab1/assets/17.png b/labs/lab1/assets/17.png new file mode 100644 index 0000000..a48dffc Binary files /dev/null and b/labs/lab1/assets/17.png differ diff --git a/labs/lab1/assets/18.png b/labs/lab1/assets/18.png new file mode 100644 index 0000000..1becd5a Binary files /dev/null and b/labs/lab1/assets/18.png differ diff --git a/labs/lab1/assets/19.png b/labs/lab1/assets/19.png new file mode 100644 index 0000000..dee1868 Binary files /dev/null and b/labs/lab1/assets/19.png differ diff --git a/labs/lab1/assets/2.png b/labs/lab1/assets/2.png new file mode 100644 index 0000000..2099518 Binary files /dev/null and b/labs/lab1/assets/2.png differ diff --git a/labs/lab1/assets/20.png b/labs/lab1/assets/20.png new file mode 100644 index 0000000..e059fb2 Binary files /dev/null and b/labs/lab1/assets/20.png differ diff --git a/labs/lab1/assets/21.png b/labs/lab1/assets/21.png new file mode 100644 index 0000000..1058a15 Binary files /dev/null and b/labs/lab1/assets/21.png differ diff --git a/labs/lab1/assets/22.png b/labs/lab1/assets/22.png new file mode 100644 index 0000000..9bd1494 Binary files /dev/null and b/labs/lab1/assets/22.png differ diff --git a/labs/lab1/assets/23.png b/labs/lab1/assets/23.png new file mode 100644 index 0000000..16a7f62 Binary files /dev/null and b/labs/lab1/assets/23.png differ diff --git a/labs/lab1/assets/3.png b/labs/lab1/assets/3.png new file mode 100644 index 0000000..ed49a39 Binary files /dev/null and b/labs/lab1/assets/3.png differ diff --git a/labs/lab1/assets/4.png b/labs/lab1/assets/4.png new file mode 100644 index 0000000..7cd7c81 Binary files /dev/null and b/labs/lab1/assets/4.png differ diff --git a/labs/lab1/assets/5.png b/labs/lab1/assets/5.png new file mode 100644 index 0000000..eaa1bba Binary files /dev/null and b/labs/lab1/assets/5.png differ diff --git a/labs/lab1/assets/6.png b/labs/lab1/assets/6.png new file mode 100644 index 0000000..71418d6 Binary files /dev/null and b/labs/lab1/assets/6.png differ diff --git a/labs/lab1/assets/7.png b/labs/lab1/assets/7.png new file mode 100644 index 0000000..c2cb084 Binary files /dev/null and b/labs/lab1/assets/7.png differ diff --git a/labs/lab1/assets/8.png b/labs/lab1/assets/8.png new file mode 100644 index 0000000..d341be5 Binary files /dev/null and b/labs/lab1/assets/8.png differ diff --git a/labs/lab1/assets/9.png b/labs/lab1/assets/9.png new file mode 100644 index 0000000..8726554 Binary files /dev/null and b/labs/lab1/assets/9.png differ diff --git a/labs/lab1/report.pdf b/labs/lab1/report.pdf new file mode 100644 index 0000000..06cbfa6 Binary files /dev/null and b/labs/lab1/report.pdf differ diff --git a/labs/lab1/report.typ b/labs/lab1/report.typ new file mode 100644 index 0000000..10ba2eb --- /dev/null +++ b/labs/lab1/report.typ @@ -0,0 +1,229 @@ +#set text(size: 1.3em) +#show link: underline + +#show raw.where(block: false): box.with( + fill: luma(240), + inset: (x: 3pt, y: 0pt), + outset: (y: 3pt), + radius: 2pt, +) + +#show raw.where(block: true): block.with( + fill: luma(240), + inset: 10pt, + radius: 4pt, +) + +// title + +#align(center)[Санкт-Петербургский национальный исследовательский университет информационных технологий, механики и оптики] +\ +\ +\ +#align(center)[Факультет инфокоммуникационных технологий] +#align(center)[Направление подготовки 11.03.02] +\ +\ +#align(center)[Практическая работа №1] +#align(center)[Установка и первоначальная настройка СУБД PostgreSQL. Создание и исследование баз данных Demo и HR] +\ +\ +\ //#align(center)[Вариант 19] +\ +\ +\ +\ +\ +\ +\ +#align(right)[Выполнил:] +#align(right)[Дощенников Никита Андреевич] +#align(right)[Группа: К3221] +#align(right)[Проверила:] +#align(right)[Татьяна Евгеньевна Войтюк] +\ +\ +#align(center)[Санкт-Петербург] +#align(center)[2025] + +#pagebreak() + +=== Цель работы: + +Освоить базовые приёмы установки и настройки СУБД PostgreSQL, научиться использовать pgAdmin для администрирования, развернуть учебную базу данных Demo и ознакомиться с её структурой, а также закрепить навыки создания баз данных и схем на примере учебной БД HR. + +=== Задачи, решаемые при выполнении работы. + +- Установить и настроить СУБД PostgreSQL и клиент pgAdmin. +- Проверить корректность работы сервера с помощью выполнения тестового SQL-запроса. +- Развернуть учебную базу данных Demo из предоставленного SQL-дампа и убедиться в доступности её объектов. +- Ознакомиться со структурой базы данных Demo и проанализировать основные сущности. +- Создать учебную базу данных HR двумя способами: через графический интерфейс pgAdmin и с помощью SQL-оператора `CREATE DATABASE`. +- Создать в базе данных HR схемы для группировки объектов (через GUI и SQL). + +=== Исходные данные. + +- Сервер с установленными Docker и контейнерами: + - postgres:16 — сервер СУБД PostgreSQL, + - dpage/pgadmin4 — веб-интерфейс для администрирования. +- Учебный SQL-дамп базы данных Demo (`demo-medium-20170815.sql`), предоставленный разработчиками Postgres Pro. +- Методические материалы по практической работе №1. +- Доступ к веб-интерфейсу pgAdmin 4 для подключения и выполнения SQL-запросов. + +=== Выполнение работы. + +==== Задание 1. Установка необходимого ПО. + +Для выполнения работы была установлена система управления базами данных PostgreSQL и клиентское приложение pgAdmin. Установка производилась в среде Docker. + +- На сервере был установлен Docker и запущены контейнеры: + - `postgres:16` - сервер СУБД PostgreSQL, + - `dpage/pgadmin4` - веб-интерфейс pgAdmin для администрирования. + +#align(center)[#image("assets/18.png")] + +- Контейнеры были объединены в общую сеть Docker, чтобы pgAdmin мог напрямую подключаться к Postgres. + +#align(center)[#image("assets/19.png")] + +- pgAdmin 4 стал доступен по адресу #link("https://db.fymio.us")[db.fymio.us] + +#align(center)[#image("assets/20.png")] + +- В pgAdmin был зарегистрирован новый сервер. В настройках подключения были указаны следующие параметры: + +#align(center)[#image("assets/16.png")] +#align(center)[#image("assets/17.png")] + +В "Object Explorer" слева я раскрыл узел "Databases": + +#align(center)[#image("assets/1.png")] + +Затем я нажал ПКМ по базе "postgres" и выбрал инструмент "Querry Tool": + +#align(center)[#image("assets/2.png")] + +В открывшемся окне написал запрос проверки версии сервера `SELECT version();`. После этого нажал кнопку "Execute script". + +#align(center)[#image("assets/3.png")] + +В поле "Data Output" я увидел версию `PostgreSQL 16.10`. + + +==== Задание 2. Подключение учебной базы данных. + +После выполнения следующих команд на сервере учебная база данных появилась в "Object Explorer". + +```bash +wget https://edu.postgrespro.ru/demo-medium.zip +unzip demo-medium.zip +docker exec -i postgres psql -U postgres -d postgres < demo-medium-20170815.sql +``` + +После появления базы данных "demo", в "Querry Tool" я выполнил следующий скрипт: + +```sql +SELECT * FROM bookings.aircrafts_data; +``` + +#align(center)[#image("assets/4.png")] + +==== Задание 3. Ознакомление с учебной БД. + +Я открыл в pgAdmin дерево объектов и изучил структуру. В схеме `booking` находятся основные таблицы: + +#align(center)[ + #table(columns: 2)[*Таблица*][*Описание*][bookings][содержит данные о бронированиях][tickets][хранит информацию о билетах и пассажирах][flights][сведения о рейсах][airports][справочник аэропортов][aircrafts][справочник моделей самолетов][seats][информация о местах в самолётах и классах обслуживания][ticket_flights][связь билетов и рейсов][boarding_passes][посадочные талоны с указанием мест в самолёте] +] + +Для проверки содержимого таблиц я выполнил несколько тестовых запросов, например: + +```sql +SELECT * FROM bookings.bookings LIMIT 5; +SELECT * FROM bookings.tickets LIMIT 5; +SELECT * FROM bookings.flights LIMIT 5; +``` + +#align(center)[#image("assets/21.png")] +#align(center)[#image("assets/22.png")] +#align(center)[#image("assets/23.png")] + + +==== Задание 4. Создание учебной базы данных HR средствами pgAdmin. + +Я нажал ПКМ на узле "Databases" и выбрал меню "Create" затем "Database...". + +#align(center)[#image("assets/5.png")] + +Затем в октрывшемся окне я выставил следующие настройки. + +#align(center)[#image("assets/6.png")] +#align(center)[#image("assets/7.png")] + +Затем я сохранил настройки. В "Object Explorer" появилась созданная база. + +#align(center)[#image("assets/8.png")] + +После этого я удалил базу через ПКМ. + +#align(center)[#image("assets/9.png")] + +==== Задание 5. Создание учебной базы данных HR средствами PL/pgSQL + +Я открыл "Querry Tool" базы данных `postgres`. И прописал следующий скрипт. + +```sql +CREATE DATABASE hr + WITH ENCODING 'UTF8' + LC_COLLATE 'C' + LC_CTYPE 'C' + TEMPLATE template0 + CONNECTION LIMIT 1; +``` + +#align(center)[#image("assets/10.png")] + +После этого в списке баз появилась созданная. + +#align(center)[#image("assets/11.png")] + +==== Задание 6. Создание схем. + +Я развернул вкладку для создания схем. + +#align(center)[#image("assets/12.png")] + +И создал схему "EmployeesDepartments". В "Object Explorer" видно что схема создана. + +#align(center)[#image("assets/13.png")] + +Чтобы создать вторую схему, я открыл "Querry Tool" к базе `hr`. И прописал следующие запросы: + +```cs +CREATE SCHEMA IF NOT EXISTS "countries" +AUTHORIZATION postgres; +``` + +#align(center)[#image("assets/14.png")] + +В "Object Explorer" видна добавленная схема: + +#align(center)[#image("assets/15.png")] + +=== Выводы. + +В ходе выполнения работы я освоил базовые приёмы установки и настройки СУБД PostgreSQL, а также работу с клиентским приложением pgAdmin. Было развернуто необходимое программное обеспечение в контейнерах Docker. + +В процессе работы удалось: + +- установить PostgreSQL и pgAdmin +- загрузить и подключить учебную базу данных и выполнить тестовые запросы к ней +- ознакомиться со структурой Demo и основными сущностями +- создать учебную базу данных двумя способами — через графический интерфейс pgAdmin и с использованием SQL-оператора `CREATE DATABASE` +- создать в базе две схемы: одну средствами pgAdmin, вторую — с помощью SQL-запроса. + +При выполнении работы возникли следующие трудности: + +- при создании базы данных через SQL возникала ошибка с параметрами локали. Она была устранена с помощью указания `TEMPLATE template0` и нейтральной локали `C` +- при подключении pgAdmin к серверу пришлось настраивать отдельную Docker-сеть и регистрировать контейнеры, чтобы обеспечить доступность сервиса по адресу `db.fymio.us`. + diff --git a/labs/lab1/task.pdf b/labs/lab1/task.pdf new file mode 100644 index 0000000..5b98eb4 Binary files /dev/null and b/labs/lab1/task.pdf differ diff --git a/labs/lab1/theory.pdf b/labs/lab1/theory.pdf new file mode 100644 index 0000000..8cec326 Binary files /dev/null and b/labs/lab1/theory.pdf differ