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
|
||||
|
||||
- Требования:
|
||||
@ -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
|
||||
```
|
||||
|
||||
|
||||
@ -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`
|
||||
|
||||
91
postgres.md
91
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`.
|
||||
- Внешние ключи: `<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:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user