Update PostgreSQL and pgAdmin documentation: refine connection instructions, add Docker setup steps, and enhance example data insertion.

This commit is contained in:
Denis Volkov 2025-10-28 17:27:58 +03:00
parent 699dd0d18f
commit e72c4868cc
3 changed files with 82 additions and 72 deletions

View File

@ -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
```

View File

@ -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`

View File

@ -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`.
- Внешние ключи: `<referenced_table>_id`, тот же тип, что и PK ссылочной таблицы.
- Метки времени: `created_at`, `updated_at` типа `TIMESTAMPTZ`; задавайте `DEFAULT now()` и `NOT NULL`.
- Уникальные ограничения: `uq_<table>__<col>[_<col2>]`.
- Первичный ключ: `pk_<table>` (имя создаётся автоматически, но можно переопределить).
- Внешние ключи: `fk_<table>__<ref_table>`.
- Индексы: `idx_<table>__<col>[_<col2>]`.
Пример (рекомендуемая версия таблиц):
```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: