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