From c1904f9ef252806e2be23fa57fe75ed5f8d0deb8 Mon Sep 17 00:00:00 2001 From: Mark Zheleznyakov Date: Fri, 12 Sep 2025 11:25:45 +0300 Subject: [PATCH] feat(db/lab1): db lab1 init --- DBs/.gitignore | 2 ++ DBs/README.md | 23 +++++++++++++++ DBs/lab1/main.typ | 72 +++++++++++++++++++++++++++++++++++++++++++++++ DBs/main.typ | 10 +++++++ 4 files changed, 107 insertions(+) create mode 100644 DBs/.gitignore create mode 100644 DBs/README.md create mode 100644 DBs/lab1/main.typ create mode 100644 DBs/main.typ diff --git a/DBs/.gitignore b/DBs/.gitignore new file mode 100644 index 0000000..bd98a73 --- /dev/null +++ b/DBs/.gitignore @@ -0,0 +1,2 @@ +*.pdf + diff --git a/DBs/README.md b/DBs/README.md new file mode 100644 index 0000000..4e311ea --- /dev/null +++ b/DBs/README.md @@ -0,0 +1,23 @@ +# Базы данных + +Тут будут лежать лабы по PostgreSQL. + +## Структура + +В корне есть файл `main.typ`. Его можно скомпилировать с помощью + +``` +typst c main.typ +``` + +Внутри него есть директивы включения файлов с лабами. + +В каждой директории `^lab\d+\/$` есть как минимум один файл `main.typ`, +которые и включаются в корневой `main.typ`. Это позволяет формировать структурированный отчет +для курсовика. + +## Окружение + +- Я использую `docker.io/library/postgres:16.10-alpine3.2` в контейнере `podman` +- Для работы с БД - `pgcli` + diff --git a/DBs/lab1/main.typ b/DBs/lab1/main.typ new file mode 100644 index 0000000..5c98b44 --- /dev/null +++ b/DBs/lab1/main.typ @@ -0,0 +1,72 @@ += Работа №1. Создание базы данных. + +== Смена пароля + +```sql +ALTER USER surimi WITH PASSWORD 'trio'; +``` + +== Создание таблиц + +```sql +-- create +CREATE TABLE auto_personnel ( + id serial primary key, + first_name varchar(255), + last_name varchar(255), + father_name varchar(255) +); +COMMENT ON TABLE auto_personnel IS 'Сотрудники автопарка'; + +CREATE TABLE auto ( + id serial primary key, + num varchar(255), + color varchar(255), + mark varchar(255) +); +COMMENT ON TABLE auto IS 'Автомобили автопарка'; + +CREATE TABLE routes ( + id serial primary key, + name varchar(255) +); +COMMENT ON TABLE routes IS 'Маршруты'; + +CREATE TABLE journal ( + id serial primary key, + time_out timestamp with time zone, + time_in timestamp with time zone +); +COMMENT ON TABLE journal IS 'Журнал оператора'; +``` + +== Создание связей + +```sql +ALTER TABLE journal ADD COLUMN route_id INTEGER NOT NULL CONSTRAINT fk_journal_routes REFERENCES routes(id); +ALTER TABLE journal ADD COLUMN auto_id INTEGER NOT NULL CONSTRAINT fk_journal_auto REFERENCES auto(id); +ALTER TABLE auto ADD COLUMN personnel_id INTEGER NOT NULL CONSTRAINT fk_auto_auto_personnel REFERENCES auto_personnel(id); +``` + +== Удаление таблиц + +```sql +-- drop +DROP TABLE auto_personnel CASCADE; +DROP TABLE auto CASCADE; +DROP TABLE routes CASCADE; +DROP TABLE journal CASCADE; +``` + +== Бекап + +```sh +podman exec postgresinstance-postgres-1 pg_dump postgres -U surimi > dump.sql +``` + +== Восстановление + +```sh +podman exec -i postgresinstance-postgres-1 psql -U surimi -d postgres < dump.sql +``` + diff --git a/DBs/main.typ b/DBs/main.typ new file mode 100644 index 0000000..fbc8948 --- /dev/null +++ b/DBs/main.typ @@ -0,0 +1,10 @@ +#import "@preview/ilm:1.4.1": * + +#set text(lang: "ru") + +#show: ilm.with( + title: [Базы данных], + author: "Марк Железняков", +) + +#include "lab1/main.typ"