Промты, которые заменят вам DBA: управляем PostgreSQL, MongoDB и Redis через диалог с ИИ

Промты, которые заменят вам DBA: управляем PostgreSQL, MongoDB и Redis через диалог с ИИ

Представьте: вы — бэкенд-разработчик в небольшой команде, где нет выделенного администратора баз данных. Вы отвечаете за схему, запросы, индексы и кеш. Ошибка в индексе — и продакшн тормозит. Неверный запрос — и база падает под нагрузкой. Раньше в таких случаях звали DBA или штудировали документацию часами. Сегодня можно просто спросить ИИ — если знать, как правильно формулировать промты.

Эта подборка — не про «магические кнопки». Это конкретные, проверенные формулировки для ChatGPT, Claude или другого ассистента, которые помогают проектировать схемы, ускорять запросы, настраивать индексы и управлять кешем. Каждый промт сопровождается примером входа и выхода, а также пояснением, для какой задачи он подходит. Все примеры синтаксиса соответствуют официальной документации PostgreSQL, MongoDB и Redis.

1. Аудит схемы PostgreSQL: находим узкие места до того, как они выстрелят

Задача: проверить существующую схему на предмет отсутствия индексов, избыточных связей и потенциальных блокировок.

Промт:

Ты — опытный DBA PostgreSQL. Проанализируй следующую схему таблиц (DDL). Найди: 1) столбцы, по которым часто фильтруют, но нет индексов; 2) внешние ключи без индексов; 3) потенциальные проблемы с блокировками при конкурентных транзакциях. Предложи конкретные CREATE INDEX и объясни, почему каждый нужен. Схема: ...

Пример входа:

CREATE TABLE orders (
  id SERIAL PRIMARY KEY,
  user_id INT NOT NULL,
  status TEXT,
  created_at TIMESTAMPTZ DEFAULT now()
);
CREATE TABLE order_items (
  order_id INT REFERENCES orders(id),
  product_id INT,
  quantity INT
);

Пример выхода (сокращённо):

-- Индекс на user_id для быстрого поиска заказов пользователя
CREATE INDEX idx_orders_user_id ON orders(user_id);
-- Индекс на status для фильтрации по статусу
CREATE INDEX idx_orders_status ON orders(status);
-- Индекс на order_id для JOIN с order_items
CREATE INDEX idx_order_items_order_id ON order_items(order_id);

Пояснение: Промт заставляет ИИ мыслить как DBA и выдавать готовые SQL-команды. Подходит для ревью схемы перед деплоем.

2. Оптимизация медленного запроса: превращаем 5 секунд в 50 мс

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

Промт:

У меня есть медленный запрос в PostgreSQL. Вот он: [текст запроса]. Вот план выполнения (EXPLAIN ANALYZE): [вставить план]. Предложи, как переписать запрос или какие индексы добавить, чтобы уложиться в 100 мс. Объясни, почему текущий план плох.

Пример входа:

SELECT u.name, COUNT(o.id) 
FROM users u 
JOIN orders o ON u.id = o.user_id 
WHERE o.created_at > '2026-01-01' 
GROUP BY u.name;

Пример выхода:

-- Добавить индекс на orders.created_at
CREATE INDEX idx_orders_created_at ON orders(created_at);
-- Переписать запрос с использованием подзапроса
SELECT u.name, o.cnt
FROM users u
JOIN (
  SELECT user_id, COUNT(*) AS cnt
  FROM orders
  WHERE created_at > '2026-01-01'
  GROUP BY user_id
) o ON u.id = o.user_id;

Пояснение: ИИ анализирует план и предлагает конкретные шаги. Экономит часы ручного анализа.

3. Генерация индексов для JSONB в PostgreSQL

Задача: создать индексы для полей внутри JSONB-колонки.

Промт:

В PostgreSQL есть таблица events с колонкой data типа JSONB. Внутри data часто ищут по ключу 'user_id' (число) и 'event_type' (строка). Предложи оптимальные индексы (GIN, BTREE) и примеры запросов, которые они ускорят.

Пример выхода:

-- Индекс для поиска по user_id
CREATE INDEX idx_events_user_id ON events ((data->>'user_id'));
-- Индекс для event_type
CREATE INDEX idx_events_event_type ON events ((data->>'event_type'));
-- Для сложных запросов можно использовать GIN
CREATE INDEX idx_events_data_gin ON events USING GIN (data);

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

4. Проектирование схемы MongoDB: когда embedded, а когда references

Задача: выбрать между встраиванием документов и ссылками.

Промт:

Проектирую MongoDB для блога. Есть сущности: пользователи, посты, комментарии. Посты могут содержать до 100 комментариев. Что лучше: встраивать комментарии в пост или хранить отдельной коллекцией? Объясни плюсы и минусы, предложи схему документов.

Пример выхода:

// Вариант с встраиванием (если комментариев немного и они всегда нужны вместе с постом)
{
  _id: ObjectId,
  title: "...",
  comments: [
    { user_id: ObjectId, text: "...", created_at: ISODate }
  ]
}
// Вариант со ссылками (если комментариев много или нужна пагинация)
// Коллекция posts
{ _id: ObjectId, title: "..." }
// Коллекция comments
{ _id: ObjectId, post_id: ObjectId, user_id: ObjectId, text: "..." }

Пояснение: Промт помогает принять архитектурное решение на основе лучших практик MongoDB.

5. Агрегация в MongoDB: составляем pipeline для отчёта

Задача: написать сложный агрегационный запрос.

Промт:

Напиши aggregation pipeline для MongoDB. Коллекция sales: { date, product_id, quantity, price }. Нужно: сгруппировать по product_id, посчитать общую выручку (quantity * price), отфильтровать продукты с выручкой > 10000, отсортировать по убыванию выручки. Выведи product_id и revenue.

Пример выхода:

db.sales.aggregate([
  { $group: {
      _id: "$product_id",
      revenue: { $sum: { $multiply: ["$quantity", "$price"] } }
  }},
  { $match: { revenue: { $gt: 10000 } } },
  { $sort: { revenue: -1 } },
  { $project: { _id: 0, product_id: "$_id", revenue: 1 } }
])

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

6. Настройка TTL-индексов в MongoDB для автоочистки

Задача: автоматически удалять старые документы.

Промт:

В коллекции logs MongoDB есть поле created_at типа Date. Нужно, чтобы документы старше 30 дней автоматически удалялись. Как создать TTL-индекс? Приведи команду и объясни, как проверить его работу.

Пример выхода:

db.logs.createIndex({ "created_at": 1 }, { expireAfterSeconds: 2592000 }) // 30 дней
// Проверка:
db.logs.getIndexes()

Пояснение: TTL-индексы — простой способ управлять жизненным циклом данных без внешних скриптов.

7. Кеширование в Redis: выбираем структуру данных

Задача: определить, какую структуру Redis использовать для конкретного сценария.

Промт:

Мне нужно кешировать результаты поиска по товарам. Ключ — поисковый запрос, значение — список ID товаров. TTL — 1 час. Какую структуру Redis выбрать: String, List, Set, Hash? Объясни и приведи примеры команд.

Пример выхода:

# Использовать String с JSON-сериализацией
SET search:iphone "[1,2,3]" EX 3600
GET search:iphone

Пояснение: Промт помогает выбрать оптимальный тип и избежать ошибок с сериализацией.

8. Инвалидация кеша в Redis: паттерны и антипаттерны

Задача: организовать сброс кеша при обновлении данных.

Промт:

У меня есть кеш в Redis для профилей пользователей (ключи вида user:123:profile). При обновлении профиля нужно сбросить кеш. Предложи стратегии инвалидации: по ключу, по тегам, с использованием Pub/Sub. Какие подводные камни?

Пример выхода:

# Инвалидация по ключу
DEL user:123:profile
# Инвалидация по шаблону (осторожно, блокирует Redis)
SCAN 0 MATCH user:123:* COUNT 100

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

9. Мониторинг производительности PostgreSQL: какие метрики смотреть

Задача: настроить базовый мониторинг без DBA.

Промт:

Я разработчик, хочу следить за здоровьем PostgreSQL. Какие 5 метрик самые важные? Как их получить через SQL? Напиши запросы к системным представлениям pg_stat_activity, pg_stat_user_tables и pg_stat_statements.

Пример выхода:

-- Долгие запросы
SELECT pid, now() - query_start AS duration, query 
FROM pg_stat_activity 
WHERE state = 'active' AND now() - query_start > interval '5 seconds';
-- Блокировки
SELECT * FROM pg_locks WHERE NOT granted;

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

10. Миграция данных из MongoDB в PostgreSQL: генерируем скрипт

Задача: перенести данные между разными СУБД.

Промт:

Нужно перенести данные из коллекции MongoDB users в таблицу PostgreSQL users. Поля: _id (ObjectId), name, email, created_at (ISODate). Напиши Python-скрипт с использованием pymongo и psycopg2, который выгружает данные и вставляет их в PostgreSQL. Учти преобразование типов.

Пример выхода (сокращённо):

from pymongo import MongoClient
import psycopg2

mongo = MongoClient('mongodb://localhost:27017')
pg = psycopg2.connect('dbname=test user=postgres')

for doc in mongo.db.users.find():
    cur = pg.cursor()
    cur.execute(
        "INSERT INTO users (id, name, email, created_at) VALUES (%s, %s, %s, %s)",
        (str(doc['_id']), doc['name'], doc['email'], doc['created_at'])
    )
pg.commit()

Пояснение: Промт экономит время на написание рутинного кода миграции.

11. Безопасность: проверяем права доступа в PostgreSQL

Задача: убедиться, что у пользователя нет лишних привилегий.

Промт:

Проверь права пользователя app_user в PostgreSQL. Какие запросы покажут его привилегии на таблицы, схемы и базы данных? Напиши SQL для проверки и объясни, как отозвать лишние права.

Пример выхода:

-- Права на таблицы
SELECT grantee, table_name, privilege_type 
FROM information_schema.table_privileges 
WHERE grantee = 'app_user';
-- Отзыв прав
REVOKE DELETE ON ALL TABLES IN SCHEMA public FROM app_user;

Пояснение: Регулярная проверка прав — часть гигиены безопасности. Промт даёт готовые запросы.

12. Резервное копирование и восстановление: инструкции для трёх СУБД

Задача: быстро получить команды для бэкапа и восстановления.

Промт:

Напиши команды для резервного копирования и восстановления для PostgreSQL, MongoDB и Redis. Для каждой СУБД: команда бэкапа, команда восстановления, важные флаги. Предположи, что нужно сохранить дамп в файл.

Пример выхода:

# PostgreSQL
pg_dump -U user -d dbname -f backup.sql
psql -U user -d dbname -f backup.sql

# MongoDB
mongodump --db dbname --out /backup/
mongorestore --db dbname /backup/dbname

# Redis
redis-cli SAVE  # создаёт dump.rdb
# Восстановление: скопировать dump.rdb в директорию и перезапустить Redis

Пояснение: Шпаргалка на случай, когда нужно срочно сделать бэкап, а под рукой нет админа.


Эти двенадцать промтов покрывают основные задачи, с которыми сталкивается разработчик без выделенного DBA: от проектирования схемы до восстановления из бэкапа. Используйте их как отправную точку, адаптируйте под свой контекст и всегда проверяйте сгенерированный код на тестовой среде. ИИ не заменяет экспертизу, но может стать вашим персональным ассистентом, который ускоряет рутину и подсказывает лучшие практики. Попробуйте применить хотя бы один промт в своём проекте — и вы удивитесь, сколько времени освободится для действительно важных задач.

Источники:
- Официальная документация PostgreSQL: https://www.postgresql.org/docs/current/
- Документация MongoDB: https://www.mongodb.com/docs/manual/
- Документация Redis: https://redis.io/docs/

← Все статьи

Комментарии

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

Интеграция Prometheus с AI-агентом: как автоматизировать реагирование на инциденты без программирования

30 июня 2026

Почему курс по блокчейну и Web3 на Asibiont — ваша самая умная ставка на 2026 год

16 июля 2026

Перспективы 5G в России: разбираем свежее исследование МТС (2026 год)

26 июня 2026

Освоение копирайтинга в 2026 году: как курс «Копирайтинг и контент» сочетает классические техники с ИИ для реальных результатов

13 июля 2026

Банковское право обучение: как AI-курс на Asibiont упрощает 395-ФЗ и надзор ЦБ

18 июля 2026

Агрегаторы нейросетей для бизнеса в России: выгода, цены и топ-сервисы 2026

22 июля 2026

10 мощных промтов для IoT и Embedded: Arduino, ESP32 и Raspberry Pi

30 июня 2026

Контекстная инженерия: что это такое, как работать с контекстом и почему за это начали платить

9 июля 2026

40 промтов для технического SEO-аудита: как поднять блог в топ-3 за 4 месяца без ссылок и контент-фабрики

20 сентября 2026