Skip to content
Back to skills

Postgresql

ASecurity

Глубокая работа с PostgreSQL — проектирование схемы и типов, индексы (btree/GIN/GiST/BRIN/partial/covering), чтение планов EXPLAIN ANALYZE и оптимизация запросов, транзакции/изоляция/блокировки, JSONB и полнотекстовый поиск, партиционирование, репликация, пулы соединений и миграции без простоя. Use при работе с Postgres, проектировании схемы или оптимизации SQL.

  • 2 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 11, 2026
databasessql

Works with

  • mcp

Security analysis

A100/100

Scanned September 11, 2026

npx -y skills add Vitammiin/agent-vorcl-flow --skill postgresql --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Postgresql?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Postgresql
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vitammiin-postgresql/badge)](https://www.skillsdirectory.com/skills/vitammiin-postgresql)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: postgresql
description: Глубокая работа с PostgreSQL — проектирование схемы и типов, индексы (btree/GIN/GiST/BRIN/partial/covering), чтение планов EXPLAIN ANALYZE и оптимизация запросов, транзакции/изоляция/блокировки, JSONB и полнотекстовый поиск, партиционирование, репликация, пулы соединений и миграции без простоя. Use при работе с Postgres, проектировании схемы или оптимизации SQL.
---

# Навык: PostgreSQL

Реляционная БД по умолчанию для сильносвязанных данных с транзакциями и сложными запросами.

## Схема и типы
- Правильные типы: `text` вместо `varchar(n)` без нужды, `timestamptz` (не `timestamp`), `numeric` для денег, `uuid`, `boolean`, `enum`/`domain`.
- Ограничения на уровне БД: `NOT NULL`, `CHECK`, `UNIQUE`, внешние ключи с `ON DELETE`. Данные защищает схема, а не приложение.
- Генерируемые столбцы, `DEFAULT`, идентификаторы `GENERATED ALWAYS AS IDENTITY`.

## Индексы
- **btree** — равенство/диапазоны/сортировка (дефолт). **GIN** — `jsonb`, массивы, полнотекст. **GiST** — гео/диапазоны. **BRIN** — огромные append-only по времени.
- **Составной** индекс: порядок столбцов = порядок фильтрации (leftmost prefix). **Partial** (`WHERE`) — под горячий срез. **Covering** (`INCLUDE`) — index-only scan.
- Индексируй столбцы из `WHERE`/`JOIN`/`ORDER BY`; не плоди лишние (замедляют запись). `CREATE INDEX CONCURRENTLY` — без блокировки таблицы.

## Оптимизация запросов
- `EXPLAIN (ANALYZE, BUFFERS)` — читай снизу вверх: **Seq Scan** на большой таблице, **Nested Loop** с большим rows, расхождение estimated/actual → проблема.
- Убирай **N+1** (JOIN/`= ANY($1)` вместо цикла), избегай `SELECT *`, функций по индексируемому столбцу (`WHERE lower(email)=` → индекс по выражению).
- `ANALYZE`/автовакуум для актуальной статистики; пагинация по keyset (`WHERE id > $last`) вместо больших `OFFSET`.

## Транзакции, изоляция, блокировки
- Уровни: `READ COMMITTED` (дефолт) → `REPEATABLE READ` → `SERIALIZABLE`. Выше уровень — больше сериализационных ошибок (готовь retry).
- `SELECT ... FOR UPDATE`/`FOR NO KEY UPDATE` — явные блокировки строк; следи за порядком захвата (deadlock).
- Короткие транзакции; никакого внешнего I/O внутри транзакции.

## JSONB и поиск
- `jsonb` для полуструктурированных данных; операторы `->`, `->>`, `@>`, индекс `GIN (col jsonb_path_ops)`.
- Полнотекст: `tsvector`/`tsquery` + GIN; для fuzzy — `pg_trgm`.

## Масштаб
- **Партиционирование** (declarative, по диапазону/списку/хэшу) для больших таблиц — прунинг партиций ускоряет запросы, упрощает архивацию.
- **Репликация**: стриминг-реплики для чтения; разноси read/write. Расширения: `PostGIS`, `pg_stat_statements` (поиск медленных запросов), `TimescaleDB` для time-series.

## Пулы и миграции
- Пул соединений обязателен (**PgBouncer**/пул драйвера); Postgres плохо переносит тысячи коннектов.
- Миграции без простоя по схеме **expand → migrate → contract**: сначала добавь nullable-столбец/индекс `CONCURRENTLY`, задеплой код, потом бэкфилл, затем `NOT NULL`/удаление старого. Не переименовывай столбцы в один шаг.

## Антипаттерны
- Логика/индексы «в приложении» вместо БД; отсутствие FK; `OFFSET` для глубокой пагинации; `text`-хранение денег/времени; один гигантский индекс на всё; долгие транзакции.

## Через MCP
MCP-сервер `postgres` (read-only) — для инспекции: смотри схему, гоняй `EXPLAIN ANALYZE`, проверяй индексы и данные без правок. Изменения схемы/данных — только миграциями с подтверждением человека.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…