PostgreSQL и MongoDB: 12 промтов, которые заменят половину рутины в работе с БД

Каждый день разработчики и аналитики тратят часы на однотипные задачи: придумать схему, написать сложный JOIN, разобраться, почему запрос тормозит. AI-ассистенты умеют это делать за минуты — но только если правильно составить промт. В этой статье я собрал 12 проверенных промтов для PostgreSQL и MongoDB, которые закрывают 80% ежедневных сценариев: от генерации схем до оптимизации через EXPLAIN. Каждый промт сопровождается примером использования и пояснением, когда его применять. Погнали.

Базовые промты: схемы и простые запросы

1. Генерация схемы по описанию

Когда применять: нужно быстро создать структуру таблиц или коллекций под новую фичу, не открывая документацию.

Промт:

Ты — DBA с 10-летним опытом. Спроектируй схему PostgreSQL для интернет-магазина. Таблицы: users, products, orders, order_items. Учти внешние ключи, индексы на часто используемые поля, типы данных. Добавь комментарии к каждой таблице и полю.

Пример результата:

CREATE TABLE users (
    id BIGSERIAL PRIMARY KEY,
    email VARCHAR(255) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT NOW()
);
-- ... остальные таблицы

Почему это работает: модель знает типовые паттерны и генерирует согласованную схему. Важно указывать СУБД и уровень детализации.

2. Написание SELECT-запроса по описанию

Когда применять: нужно быстро получить выборку по сложному условию, не вспоминая синтаксис.

Промт:

Напиши SQL-запрос для PostgreSQL: вывести топ-10 пользователей по сумме заказов за последний месяц. Учитывай только успешные заказы (status = 'completed'). В результат включи имя, email, сумму.

Пример результата:

SELECT u.name, u.email, SUM(o.total) AS total_spent
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE o.status = 'completed' AND o.created_at >= NOW() - INTERVAL '1 month'
GROUP BY u.id
ORDER BY total_spent DESC
LIMIT 10;

3. Объяснение чужого запроса

Когда применять: нашли сложный запрос в коде и нужно быстро понять, что он делает.

Промт:

Объясни, что делает этот SQL-запрос, простыми словами. Разбей на шаги.
[вставьте запрос]

Пример результата:

Шаг 1: Выбираем пользователей из таблицы users.
Шаг 2: Присоединяем таблицу orders по внешнему ключу.
Шаг 3: Фильтруем заказы за последние 30 дней.
...

Это экономит время на чтение документации и помогает новичкам быстрее войти в контекст.

Продвинутые промты: оптимизация и агрегации

4. Анализ плана выполнения (EXPLAIN)

Когда применять: запрос выполняется долго, нужно найти узкое место.

Промт:

Вот результат EXPLAIN ANALYZE для PostgreSQL. Проанализируй его и предложи, как ускорить запрос: какие индексы добавить, что изменить в запросе. Укажи конкретные рекомендации.
[вставьте вывод]

Пример результата:

1. Sequential Scan на users — 100k строк, фильтр по email. Рекомендация: создать индекс btree (email).
2. Hash Join — дешевле, чем Nested Loop, но можно переписать на JOIN ... USING.
...

5. Оптимизация медленного запроса без EXPLAIN

Когда применять: нет доступа к плану, но запрос тормозит.

Промт:

SQL-запрос выполняется 10 секунд. Предложи 3 способа ускорить его: оптимизация индексов, переписывание запроса, изменение схемы. Для каждого способа приведи пример кода.
[вставьте запрос]

Пример результата:

-- 1. Добавить индекс на (user_id, created_at)
CREATE INDEX idx_orders_user_created ON orders(user_id, created_at);
-- 2. Использовать UNION ALL вместо OR
-- 3. Денормализовать сумму в users.total_spent

6. Написание агрегаций MongoDB

Когда применять: нужно построить аналитический отчёт по данным в MongoDB.

Промт:

Составь aggregation pipeline для MongoDB: по коллекции orders (поля: userId, amount, status, createdAt) посчитай общую выручку по дням за последнюю неделю, только для статуса 'paid'. Отсортируй по дате.

Пример результата:

db.orders.aggregate([
  { $match: { status: 'paid', createdAt: { $gte: new Date(Date.now() - 7*24*60*60*1000) } } },
  { $group: { _id: { $dateToString: { format: '%Y-%m-%d', date: '$createdAt' } }, total: { $sum: '$amount' } } },
  { $sort: { _id: 1 } }
])

7. Генерация миграций

Когда применять: нужно изменить схему без потери данных.

Промт:

Напиши SQL-миграцию для PostgreSQL: добавить таблицу user_profiles с полями user_id, bio, avatar_url, создать внешний ключ на users. Используй IF NOT EXISTS.

Пример результата:

CREATE TABLE IF NOT EXISTS user_profiles (
    user_id BIGINT PRIMARY KEY REFERENCES users(id) ON DELETE CASCADE,
    bio TEXT,
    avatar_url VARCHAR(500)
);

Экспертные промты: индексы, партиционирование, сложные сценарии

8. Выбор индексов для конкретной нагрузки

Когда применять: нужно спроектировать индексы под известные паттерны запросов.

Промт:

У меня таблица events (id, user_id, event_type, created_at). Основные запросы: выборка по user_id и дате, группировка по event_type. Предложи оптимальные индексы для PostgreSQL, объясни, почему они подходят.

Пример результата:

CREATE INDEX idx_events_user_created ON events(user_id, created_at);
CREATE INDEX idx_events_type ON events(event_type);

9. Партиционирование больших таблиц

Когда применять: таблица разрослась до миллионов строк, запросы тормозят.

Промт:

Спроектируй партиционирование для таблицы logs в PostgreSQL по дате. Покажи DDL для создания партиционированной таблицы и триггер для автоматического создания партиций на месяц.

Пример результата:

CREATE TABLE logs (
    id BIGSERIAL,
    created_at DATE NOT NULL,
    message TEXT
) PARTITION BY RANGE (created_at);

CREATE TABLE logs_2026_08 PARTITION OF logs FOR VALUES FROM ('2026-08-01') TO ('2026-09-01');
-- ... триггерная функция

10. Переписывание подзапросов в JOIN

Когда применять: запрос с подзапросами работает медленно, нужно оптимизировать.

Промт:

Перепиши этот SQL-запрос с подзапросами в JOIN, сохранив логику. Объясни, почему JOIN может быть быстрее.
[вставьте запрос]

11. Диагностика блокировок в PostgreSQL

Когда применять: приложение зависает из-за взаимных блокировок.

Промт:

Я подозреваю блокировки. Дай запрос для поиска заблокированных сессий в PostgreSQL и объясни, как их устранить.

Пример результата:

SELECT pid, state, wait_event_type, wait_event, query
FROM pg_stat_activity
WHERE wait_event_type IS NOT NULL;

12. Генерация тестовых данных

Когда применять: нужно заполнить базу для разработки.

Промт:

Сгенерируй 1000 строк для таблицы users (id, email, name) в PostgreSQL с реалистичными данными. Используй generate_series.

Пример результата:

INSERT INTO users (email, name)
SELECT 'user'

|| i || '@example.com', 'User ' || i
FROM generate_series(1, 1000) AS i;

Как выбрать подходящий промт

Уровень Когда использовать Примеры промтов
Базовый Новичок, быстрые задачи 1–3
Продвинутый Оптимизация, агрегации 4–7
Экспертный Сложные сценарии, проектирование 8–12

Заключение

Эти промты — не магия, а инструмент. Они экономят часы на рутине и помогают быстрее разбираться в чужом коде. Но помните: AI ошибается, поэтому всегда проверяйте результат на тестовых данных. Начните с трёх промтов из списка, которые чаще всего пригодятся в вашей работе, и адаптируйте их под свои задачи. Удачной оптимизации!

← Все статьи

Комментарии

Читайте также

Научная статья и диссертация: 12 промтов, которые заменят аспиранту часы работы с литературой и рецензентами

24 августа 2026

Промты для GameDev: как заставить нейросеть проектировать уровни, баланс и диалоги

23 августа 2026

12 промтов для DevSecOps: как встроить безопасность в CI/CD без боли и костылей

23 августа 2026

12 промтов для Go, которые превратят горутины в суперсилу: от конкурентности до микросервисов

23 августа 2026

Go в 2,5 раза быстрее: 12 промтов, которые заменили нам половину рутины в бэкенде

23 августа 2026

12 промтов, которые заменяют половину SMM-отдела: от идеи до контент-плана за минуту

23 августа 2026

Как заставить ChatGPT выучить китайский: 15 промтов, которые заменят репетитора

23 августа 2026

От graceful shutdown до observability: 12 промтов для Go-микросервисов, которые сэкономят часы работы

23 августа 2026

Мультимодальный AI-конвейер: промпты, которые превращают текст, изображения и видео в единый рабочий процесс

23 августа 2026