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 #### Установка 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
```

View File

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

View File

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