diff --git a/labs/lab1/report.pdf b/labs/lab1/report.pdf index 3ecfd49..5f583af 100644 Binary files a/labs/lab1/report.pdf and b/labs/lab1/report.pdf differ diff --git a/labs/lab1/report.typ b/labs/lab1/report.typ index 20e30d4..71d00e8 100644 --- a/labs/lab1/report.typ +++ b/labs/lab1/report.typ @@ -106,34 +106,86 @@ Для выполнения работы была установлена субд postgresql и приложение pgadmin. Установка производилась в среде docker. -На сервере был установлен docker и запущены контейнеры: `postgres:16`, `dpage/pgadmin4`. +На сервере был установлен docker и запущены контейнеры: `postgres:16`, `dpage/pgadmin4`. На рис. 1 показан вывод команды `docker ps`, который показывает запущенные контейнеры `pgadmin` и `postgres`. -#align(center)[#image("part1/assets/18.png")] +#align(center)[ + #figure( + image("part1/assets/18.png"), + caption: [Результат команды `docker ps`.], + supplement: [Рис] + ) +] -Контейнеры были объединены в общую сеть docker, чтобы pgadmin мог напрямую подключаться к postgres. +Контейнеры были объединены в общую сеть docker, чтобы pgadmin мог напрямую подключаться к postgres. На рис. 2 показаны настройки сети `dbnet`. -#align(center)[#image("part1/assets/19.png")] +#align(center)[ + #figure( + image("part1/assets/19.png"), + caption: [Настройки сети `dbnet`.], + supplement: [Рис] + ) +] -pgadmin стал доступен по адресу #link("https://db.fymio.us")[db.fymio.us] -#align(center)[#image("part1/assets/20.png")] +pgadmin стал доступен по адресу #link("https://db.fymio.us")[db.fymio.us] -В pgadmin был зарегистрирован новый сервер. В настройках подключения были указаны следующие параметры: +На рис. 3 показан фрагмент `Caddyfile`, ответственный за #link("https://db.fymio.us")[db.fymio.us]. -#align(center)[#image("part1/assets/16.png")] -#align(center)[#image("part1/assets/17.png")] +#align(center)[ + #figure( + image("part1/assets/20.png"), + caption: [Часть вывода команды `cat /etc/caddy/Caddyfile`.], + supplement: [Рис] + ) +] -В "Object Explorer" слева я раскрыл узел "Databases": +В pgadmin был зарегистрирован новый сервер. В настройках подключения были указаны следующие параметры. На рис. 4, 5 показаны соответствующие настройки. -#align(center)[#image("part1/assets/1.png")] +#align(center)[ + #figure( + image("part1/assets/16.png"), + caption: [Настройки General сервера Web PostgreSQL.], + supplement: [Рис] + ) +] -Затем я нажал ПКМ по базе "postgres" и выбрал инструмент "Querry Tool": +#align(center)[ + #figure( + image("part1/assets/17.png"), + caption: [Настройки Connection сервера Web PostgreSQL.], + supplement: [Рис] + ) +] -#align(center)[#image("part1/assets/2.png")] +В "Object Explorer" слева я раскрыл узел "Databases" (Рис. 6): -В открывшемся окне написал запрос проверки версии сервера `SELECT version();`. После этого нажал кнопку "Execute script". +#align(center)[ + #figure( + image("part1/assets/1.png"), + caption: [Object Explorer -> Databases.], + supplement: [Рис] + ) +] -#align(center)[#image("part1/assets/3.png")] +Затем я нажал ПКМ по базе "postgres" и выбрал инструмент "Querry Tool" (Рис. 7): + +#align(center)[ + #figure( + image("part1/assets/2.png"), + caption: [Открытие Querry Tool.], + supplement: [Рис] + ) +] + +В открывшемся окне написал запрос проверки версии сервера `SELECT version();`. После этого нажал кнопку "Execute script" (Рис. 8). + +#align(center)[ + #figure( + image("part1/assets/3.png"), + caption: [Выполнение скрипта проверки версии.], + supplement: [Рис] + ) +] В поле "Data Output" я увидел версию `PostgreSQL 16.10`. @@ -148,13 +200,20 @@ unzip demo-medium.zip docker exec -i postgres psql -U postgres -d postgres < demo-medium-20170815.sql ``` -После появления базы данных "demo", в "Querry Tool" я выполнил следующий скрипт: +После появления базы данных "demo", в "Querry Tool" я выполнил следующий скрипт (Рис. 9): ```sql SELECT * FROM bookings.aircrafts_data; ``` -#align(center)[#image("part1/assets/4.png")] +#align(center)[ + #figure( + image("part1/assets/4.png"), + caption: [Выполнение скрипта `SELECT * FROM bookings.aircrafts_data`.], + supplement: [Рис] + ) +] + ===== Задание 3. Ознакомление с учебной БД. @@ -162,26 +221,58 @@ SELECT * FROM bookings.aircrafts_data; ===== Задание 4. Создание учебной базы данных HR средствами pgAdmin. -Я нажал ПКМ на узле "Databases" и выбрал меню "Create" затем "Database...". +Я нажал ПКМ на узле "Databases" и выбрал меню "Create" затем "Database..." (Рис. 10). -#align(center)[#image("part1/assets/5.png")] +#align(center)[ + #figure( + image("part1/assets/5.png"), + caption: [Создание новой базы данных.], + supplement: [Рис] + ) +] -Затем в октрывшемся окне я выставил следующие настройки. -#align(center)[#image("part1/assets/6.png")] -#align(center)[#image("part1/assets/7.png")] +Затем в октрывшемся окне я выставил следующие настройки (Рис. 10, 11). -Затем я сохранил настройки. В "Object Explorer" появилась созданная база. +#align(center)[ + #figure( + image("part1/assets/6.png"), + caption: [Настройки новой базы. Вкладка General.], + supplement: [Рис] + ) +] -#align(center)[#image("part1/assets/8.png")] +#align(center)[ + #figure( + image("part1/assets/7.png"), + caption: [Настройки новой базы. Вкладка Definition.], + supplement: [Рис] + ) +] -После этого я удалил базу через ПКМ. +Затем я сохранил настройки. В "Object Explorer" появилась созданная база (Рис. 12). -#align(center)[#image("part1/assets/9.png")] +#align(center)[ + #figure( + image("part1/assets/8.png"), + caption: [База `HR` в Object Explorer.], + supplement: [Рис] + ) +] + +После этого я удалил базу через ПКМ (Рис. 14). + +#align(center)[ + #figure( + image("part1/assets/9.png"), + caption: [Удаление базы `HR`.], + supplement: [Рис] + ) +] ===== Задание 5. Создание учебной базы данных HR средствами PL/pgSQL -Я открыл "Querry Tool" базы данных `postgres`. И прописал следующий скрипт. +Я открыл "Querry Tool" базы данных `postgres`. И прописал следующий скрипт (Рис. 15). ```sql CREATE DATABASE hr @@ -192,64 +283,131 @@ CREATE DATABASE hr CONNECTION LIMIT 1; ``` -#align(center)[#image("part1/assets/10.png")] +#align(center)[ + #figure( + image("part1/assets/10.png"), + caption: [Создание базы `hr` при помощи скрипта.], + supplement: [Рис] + ) +] -После этого в списке баз появилась созданная. +После этого в списке баз появилась созданная (Рис. 16). + +#align(center)[ + #figure( + image("part1/assets/11.png"), + caption: [Новая база в Object Explorer.], + supplement: [Рис] + ) +] -#align(center)[#image("part1/assets/11.png")] ===== Задание 6. Создание схем. -Я развернул вкладку для создания схем. +Я развернул вкладку для создания схем. Рис. 17 показывает меню создание схем. -#align(center)[#image("part1/assets/12.png")] +#align(center)[ + #figure( + image("part1/assets/12.png"), + caption: [Создание схемы.], + supplement: [Рис] + ) +] -И создал схему "EmployeesDepartments". В "Object Explorer" видно что схема создана. +И создал схему "EmployeesDepartments". В "Object Explorer" видно что схема создана (Рис. 18). -#align(center)[#image("part1/assets/13.png")] +#align(center)[ + #figure( + image("part1/assets/13.png"), + caption: [Новая схема появилась.], + supplement: [Рис] + ) +] -Чтобы создать вторую схему, я открыл "Querry Tool" к базе `hr`. И прописал следующие запросы: +Чтобы создать вторую схему, я открыл "Querry Tool" к базе `hr`. И прописал следующие запросы (Рис. 19): ```cs CREATE SCHEMA IF NOT EXISTS "countries" AUTHORIZATION postgres; ``` -#align(center)[#image("part1/assets/14.png")] +#align(center)[ + #figure( + image("part1/assets/14.png"), + caption: [Исполнение скрипта по созданию схемы.], + supplement: [Рис] + ) +] -В "Object Explorer" видна добавленная схема: +В "Object Explorer" видна добавленная схема (Рис. 20): -#align(center)[#image("part1/assets/15.png")] +#align(center)[ + #figure( + image("part1/assets/15.png"), + caption: [Появление новой схемы.], + supplement: [Рис] + ) +] ==== Часть 2. ===== Задание 1. Создание таблицы в графической среде pgadmin. -Я раскрыл базу hr до узла tables и выбрал опцию create: +Я раскрыл базу hr до узла tables и выбрал опцию create (Рис. 21): -#align(center)[#image("part2/assets/1.png")] +#align(center)[ + #figure( + image("part2/assets/1.png"), + caption: [Меню создания новой таблицы.], + supplement: [Рис] + ) +] -И создал таблицу `EMPLOYEES`: +И создал таблицу `EMPLOYEES` (Рис. 22): -#align(center)[#image("part2/assets/2.png")] +#align(center)[ + #figure( + image("part2/assets/2.png"), + caption: [Настройки таблицы EMPLOYEES.], + supplement: [Рис] + ) +] -Затем я заполнил вкладку `columns` как показано на рисунке в условии: +Затем я заполнил вкладку `columns` как показано на рисунке в условии (Рис. 23): -#align(center)[#image("part2/assets/3.png")] +#align(center)[ + #figure( + image("part2/assets/3.png"), + caption: [Столбцы таблицы EMPLOYEES.], + supplement: [Рис] + ) +] -Для поля `employee_id`, я выставил следующие параметры: +Для поля `employee_id`, я выставил следующие параметры (Рис. 24): -#align(center)[#image("part2/assets/4.png")] +#align(center)[ + #figure( + image("part2/assets/4.png"), + caption: [Настройки столбца `EMPLOYEE_ID` -> Constraints.], + supplement: [Рис] + ) +] -Для столбца `hire_date` я поставил значение по умолчанию `current_date`. +Для столбца `hire_date` я поставил значение по умолчанию `current_date` (Рис. 25). -#align(center)[#image("part2/assets/5.png")] +#align(center)[ + #figure( + image("part2/assets/5.png"), + caption: [Обновленное значение по умолчанию для столбца `HIRE_DATE`.], + supplement: [Рис] + ) +] После этого, я сохранил таблицу. ===== Задание 2. Создание таблицы в Query Editor. -Я открыл query tool для hr и вписал туда следующий скрипт: +Я открыл query tool для hr и вписал туда следующий скрипт (Рис. 26): ```sql CREATE TABLE "EmployeesDepartments"."DEPARTMENTS" ( @@ -260,13 +418,25 @@ CREATE TABLE "EmployeesDepartments"."DEPARTMENTS" ( ); ``` -#align(center)[#image("part2/assets/6.png")] +#align(center)[ + #figure( + image("part2/assets/6.png"), + caption: [Исполнение скрипта по созданию таблицы.], + supplement: [Рис] + ) +] -Таблица появилась в object explorer: +Таблица появилась в object explorer (Рис. 27): -#align(center)[#image("part2/assets/7.png")] +#align(center)[ + #figure( + image("part2/assets/7.png"), + caption: [Новая таблица в Object Explorer.], + supplement: [Рис] + ) +] -Затем я создал еще одну таблицу скриптом: +Затем я создал еще одну таблицу скриптом (Рис. 28): ```sql CREATE TABLE "EmployeesDepartments"."LOCATIONS" @@ -278,17 +448,29 @@ CREATE TABLE "EmployeesDepartments"."LOCATIONS" ); ``` -#align(center)[#image("part2/assets/9.png")] +#align(center)[ + #figure( + image("part2/assets/9.png"), + caption: [Исполнение скрипта по созданию таблицы.], + supplement: [Рис] + ) +] -Как можно видеть, таблица была создана: +Как можно видеть, таблица была создана (Рис. 29): -#align(center)[#image("part2/assets/10.png")] +#align(center)[ + #figure( + image("part2/assets/10.png"), + caption: [Новая таблица в Object Explorer.], + supplement: [Рис] + ) +] ===== Задание 3. Изменение таблицы. В querry tool я ввел следующее: -``` +```sql ALTER TABLE "EmployeesDepartments"."LOCATIONS" ADD STATE_PROVINCE character varying(25) NULL; ```