Update PostgreSQL and pgAdmin documentation: refine connection instructions, add Docker setup steps, and enhance example data insertion.
This commit is contained in:
parent
699dd0d18f
commit
e72c4868cc
60
README.md
60
README.md
@ -1,7 +1,5 @@
|
|||||||
# Практикум: «Работа с реляционными и нереляционными СУБД»
|
# Практикум: «Работа с реляционными и нереляционными СУБД»
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### Установка Docker Desktop на Windows
|
#### Установка Docker Desktop на Windows
|
||||||
|
|
||||||
- Требования:
|
- Требования:
|
||||||
@ -35,59 +33,13 @@
|
|||||||
docker run hello-world
|
docker run hello-world
|
||||||
docker run --rm -it alpine:3.20 echo "Docker OK"
|
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
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|||||||
@ -24,8 +24,7 @@ docker run --name pg-local -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgr
|
|||||||
- В pgAdmin: Add New Server → вкладка General:
|
- В pgAdmin: Add New Server → вкладка General:
|
||||||
- Name: `Local Postgres`
|
- Name: `Local Postgres`
|
||||||
- Вкладка Connection:
|
- Вкладка Connection:
|
||||||
- Host: `localhost` (если pgAdmin установлен на хосте)
|
- Host: `host.docker.internal` (или `172.17.0.1`, Linux)
|
||||||
- Host: `host.docker.internal` (если pgAdmin запущен в Docker без общей сети)
|
|
||||||
- Port: `5432`
|
- Port: `5432`
|
||||||
- Maintenance DB: `appdb` (или `postgres`)
|
- Maintenance DB: `appdb` (или `postgres`)
|
||||||
- Username: `postgres`
|
- Username: `postgres`
|
||||||
|
|||||||
91
postgres.md
91
postgres.md
@ -2,6 +2,52 @@
|
|||||||
|
|
||||||
Минимальные команды для работы с одной таблицей: подключение, создание с первичным ключом, CRUD и основные команды ALTER.
|
Минимальные команды для работы с одной таблицей: подключение, создание с первичным ключом, 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)
|
## Подключение (контейнер Docker)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@ -17,7 +63,6 @@ docker exec -it pg-local psql -U postgres -d appdb
|
|||||||
\du -- список ролей/пользователей
|
\du -- список ролей/пользователей
|
||||||
\dn -- список схем
|
\dn -- список схем
|
||||||
\d contacts -- описание таблицы contacts
|
\d contacts -- описание таблицы contacts
|
||||||
\i file.sql -- выполнить SQL-скрипт из файла
|
|
||||||
\q -- выход
|
\q -- выход
|
||||||
```
|
```
|
||||||
Выйти: `\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` типа `BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY`.
|
||||||
- Внешние ключи: `<referenced_table>_id`, тот же тип, что и PK ссылочной таблицы.
|
- Внешние ключи: `<referenced_table>_id`, тот же тип, что и PK ссылочной таблицы.
|
||||||
- Метки времени: `created_at`, `updated_at` типа `TIMESTAMPTZ`; задавайте `DEFAULT now()` и `NOT NULL`.
|
- Метки времени: `created_at`, `updated_at` типа `TIMESTAMPTZ`; задавайте `DEFAULT now()` и `NOT NULL`.
|
||||||
- Уникальные ограничения: `uq_<table>__<col>[_<col2>]`.
|
|
||||||
- Первичный ключ: `pk_<table>` (имя создаётся автоматически, но можно переопределить).
|
- Первичный ключ: `pk_<table>` (имя создаётся автоматически, но можно переопределить).
|
||||||
- Внешние ключи: `fk_<table>__<ref_table>`.
|
- Внешние ключи: `fk_<table>__<ref_table>`.
|
||||||
- Индексы: `idx_<table>__<col>[_<col2>]`.
|
|
||||||
|
|
||||||
Пример (рекомендуемая версия таблиц):
|
Пример (рекомендуемая версия таблиц):
|
||||||
```sql
|
```sql
|
||||||
@ -58,22 +101,37 @@ ALTER TABLE contacts
|
|||||||
ON UPDATE CASCADE
|
ON UPDATE CASCADE
|
||||||
ON DELETE SET NULL;
|
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
|
```sql
|
||||||
CREATE TABLE contacts (
|
-- 10 отделов
|
||||||
id SERIAL PRIMARY KEY,
|
INSERT INTO departments (name) VALUES
|
||||||
full_name TEXT NOT NULL,
|
('Sales'),
|
||||||
email TEXT UNIQUE,
|
('Engineering'),
|
||||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
('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
|
## Операции CRUD
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
@ -237,7 +295,8 @@ INSERT INTO companies (company_name, sector, country, revenue_usd, employees, fo
|
|||||||
('GasEast', 'Gas', 'UAE', 1300000.00, 4800, 1988),
|
('GasEast', 'Gas', 'UAE', 1300000.00, 4800, 1988),
|
||||||
('LatOil', 'Oil', 'Brazil', 500000.00, 1200, 2005),
|
('LatOil', 'Oil', 'Brazil', 500000.00, 1200, 2005),
|
||||||
('SouthGas', 'Gas', 'Brazil', 350000.00, 900, 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:
|
Группировки, фильтрация (HAVING), сортировка и LIMIT:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user