diff --git a/README.md b/README.md index cb394f6..08e9223 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,5 @@ # Практикум: «Работа с реляционными и нереляционными СУБД» - - #### Установка Docker Desktop на Windows - Требования: @@ -35,59 +33,13 @@ docker run hello-world docker run --rm -it alpine:3.20 echo "Docker OK" ``` +## Ссылки по разделам -## PostgreSQL with Docker +- [PostgreSQL](./postgres.md) +- [pgAdmin](./pgadmin.md) +- [MongoDB](./mongo.md) +- [Redis](./redis.md) +- [Neo4j](./neo4j.md) -- **Установите Docker Desktop**: Убедитесь, что Docker установлен и запущен на вашем компьютере. -- **Скачать образ Postgres**: - ```bash - docker pull postgres:16 - ``` - -- **Запустить контейнер PostgreSQL**: - ```bash - docker run --name pg-local -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=appdb -p 5432:5432 -v pgdata:/var/lib/postgresql/data -d postgres:16 - ``` - -- **Проверить, что контейнер запущен**: - ```bash - docker ps - ``` - -- **Подключение к PostgreSQL**: - - С хоста через psql (Windows PowerShell, macOS, Linux): - ```bash - psql -h localhost -p 5432 -U postgres -d appdb - ``` - При запросе пароля введите: `postgres`. - - URI‑строка подключения (подходит для приложений/GUI‑клиентов): - ``` - postgres://postgres:postgres@localhost:5432/appdb - ``` - - Через psql внутри контейнера: - ```bash - docker exec -it pg-local psql -U postgres -d appdb - ``` - - Параметры для GUI‑клиента (pgAdmin, DBeaver и др.): - - Host: `localhost` - - Port: `5432` - - User: `postgres` - - Password: `postgres` - - Database: `appdb` - - Быстрая проверка подключения (внутри psql): - ```sql - SELECT version(); - ``` - -- **Полезные команды**: - ```bash - # Остановить / запустить / удалить контейнер - docker stop pg-local - docker start pg-local - docker rm -f pg-local - - # Удалить том с данными (необратимо) - docker volume rm pgdata - ``` diff --git a/pgadmin.md b/pgadmin.md index 60a14bf..10c3eb4 100644 --- a/pgadmin.md +++ b/pgadmin.md @@ -24,8 +24,7 @@ docker run --name pg-local -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgr - В pgAdmin: Add New Server → вкладка General: - Name: `Local Postgres` - Вкладка Connection: - - Host: `localhost` (если pgAdmin установлен на хосте) - - Host: `host.docker.internal` (если pgAdmin запущен в Docker без общей сети) + - Host: `host.docker.internal` (или `172.17.0.1`, Linux) - Port: `5432` - Maintenance DB: `appdb` (или `postgres`) - Username: `postgres` diff --git a/postgres.md b/postgres.md index b8c07bc..ea90b45 100644 --- a/postgres.md +++ b/postgres.md @@ -2,6 +2,52 @@ Минимальные команды для работы с одной таблицей: подключение, создание с первичным ключом, CRUD и основные команды ALTER. +## PostgreSQL with Docker + +- **Установите Docker Desktop**: Убедитесь, что Docker установлен и запущен на вашем компьютере. + +- **Скачать образ Postgres**: + ```bash + docker pull postgres:16 + ``` + +- **Запустить контейнер PostgreSQL**: + ```bash + docker run --name pg-local -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=appdb -p 5432:5432 -v pgdata:/var/lib/postgresql/data -d postgres:16 + ``` + +- **Проверить, что контейнер запущен**: + ```bash + docker ps + ``` + +- **Подключение к PostgreSQL**: + - Через psql внутри контейнера: + ```bash + docker exec -it pg-local psql -U postgres -d appdb + ``` + - Параметры для GUI‑клиента (pgAdmin, DBeaver и др.): + - Host: `localhost` + - Port: `5432` + - User: `postgres` + - Password: `postgres` + - Database: `appdb` + - Быстрая проверка подключения (внутри psql): + ```sql + SELECT version(); + ``` + +- **Полезные команды**: + ```bash + # Остановить / запустить / удалить контейнер + docker stop pg-local + docker start pg-local + docker rm -f pg-local + + # Удалить том с данными (необратимо) + docker volume rm pgdata + ``` + ## Подключение (контейнер Docker) ```bash @@ -17,7 +63,6 @@ docker exec -it pg-local psql -U postgres -d appdb \du -- список ролей/пользователей \dn -- список схем \d contacts -- описание таблицы contacts -\i file.sql -- выполнить SQL-скрипт из файла \q -- выход ``` Выйти: `\q`. @@ -28,10 +73,8 @@ docker exec -it pg-local psql -U postgres -d appdb - Первичный ключ: как правило `id` типа `BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY`. - Внешние ключи: `_id`, тот же тип, что и PK ссылочной таблицы. - Метки времени: `created_at`, `updated_at` типа `TIMESTAMPTZ`; задавайте `DEFAULT now()` и `NOT NULL`. -- Уникальные ограничения: `uq___[_]`. - Первичный ключ: `pk_
` (имя создаётся автоматически, но можно переопределить). - Внешние ключи: `fk_
__`. -- Индексы: `idx_
__[_]`. Пример (рекомендуемая версия таблиц): ```sql @@ -58,22 +101,37 @@ ALTER TABLE contacts ON UPDATE CASCADE ON DELETE SET NULL; --- Индексы -CREATE INDEX idx_contacts__department_id ON contacts(department_id); -CREATE INDEX idx_contacts__full_name ON contacts(full_name); -``` - -## Создание таблицы (с первичным ключом) +-- Пример наполнения данными (по 10 строк в каждую таблицу) ```sql -CREATE TABLE contacts ( - id SERIAL PRIMARY KEY, - full_name TEXT NOT NULL, - email TEXT UNIQUE, - created_at TIMESTAMPTZ NOT NULL DEFAULT now() -); +-- 10 отделов +INSERT INTO departments (name) VALUES + ('Sales'), + ('Engineering'), + ('HR'), + ('Marketing'), + ('Finance'), + ('Operations'), + ('Support'), + ('IT'), + ('Legal'), + ('R&D'); + +-- 10 контактов +INSERT INTO contacts (full_name, email, department_id) VALUES + ('Alice Johnson', 'alice.johnson@example.com', 1), + ('Bob Smith', 'bob.smith@example.com', 2), + ('Carol Davis', 'carol.davis@example.com', 3), + ('David Wilson', 'david.wilson@example.com', 4), + ('Eva Brown', 'eva.brown@example.com', 5), + ('Frank Miller', 'frank.miller@example.com', 6), + ('Grace Lee', 'grace.lee@example.com', 7), + ('Henry Taylor', 'henry.taylor@example.com', 8), + ('Ivy Anderson', 'ivy.anderson@example.com', 9), + ('Jack Thomas', 'jack.thomas@example.com', 10); ``` + ## Операции CRUD ```sql @@ -237,7 +295,8 @@ INSERT INTO companies (company_name, sector, country, revenue_usd, employees, fo ('GasEast', 'Gas', 'UAE', 1300000.00, 4800, 1988), ('LatOil', 'Oil', 'Brazil', 500000.00, 1200, 2005), ('SouthGas', 'Gas', 'Brazil', 350000.00, 900, 2005), - ('OilAsia-2', 'Oil', 'UAE', 1600000.00, 6000, 1970); -- повторяющиеся страна/год/sector + ('OilAsia-2', 'Oil', 'UAE', 1600000.00, 6000, 1970), -- повторяющиеся страна/год/sector + ('PacificGas','Gas', 'Australia', 300000.00, 800, 1998); ``` Группировки, фильтрация (HAVING), сортировка и LIMIT: