Files
db/labs/lab1/report.typ
2025-10-01 22:45:46 +03:00

230 lines
11 KiB
Typst
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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`.