Введение
Базы данных — это сердце любого современного приложения. Но даже опытные разработчики часто тратят часы на написание сложных запросов, настройку индексов или диагностику медленных операций. В 2026 году AI-инструменты, такие как ChatGPT, Claude и Gemini, стали незаменимыми помощниками в работе с PostgreSQL, MongoDB и Redis. Правильно составленный промт (запрос к нейросети) может сократить время решения задачи с часов до минут.
В этой статье я собрал 15 проверенных промтов для работы с тремя популярными СУБД. Каждый промт сопровождается задачей, самим текстом запроса и примером результата. Вы узнаете, как формулировать промты для генерации SQL-запросов, оптимизации индексов, проектирования схем, написания миграций и диагностики производительности.
Категория 1: Базовые промты (для новичков)
1.1 Генерация SQL-запроса по описанию на естественном языке
Задача: Быстро получить рабочий SQL-запрос, не вспоминая синтаксис.
Промт:
Ты — эксперт по PostgreSQL. Напиши SQL-запрос для таблицы orders (колонки: id, customer_id, total, status, created_at). Нужно выбрать все заказы за последние 30 дней со статусом 'completed', отсортировать по сумме заказа по убыванию и показать только топ-10. Используй дату 2026-07-13 как сегодняшнюю.
Пример результата:
SELECT id, customer_id, total, status, created_at
FROM orders
WHERE status = 'completed'
AND created_at >= DATE '2026-07-13' - INTERVAL '30 days'
ORDER BY total DESC
LIMIT 10;
1.2 Создание индекса для ускорения запроса
Задача: Оптимизировать медленный запрос с помощью индекса.
Промт:
Ты — DBA в PostgreSQL. У нас есть запрос: SELECT * FROM users WHERE email = 'test@test.com' AND is_active = true. Запрос выполняется медленно (500 мс). Покажи, какой индекс нужно создать, и объясни, почему он поможет.
Пример результата:
CREATE INDEX idx_users_email_active ON users (email, is_active);
-- Этот составной индекс покроет оба условия WHERE, позволяя БД выполнять только Index Scan вместо Seq Scan.
1.3 Проектирование схемы для MongoDB
Задача: Спроектировать коллекцию для блога с постами, авторами и комментариями.
Промт:
Ты — архитектор MongoDB. Спроектируй схему для блога. Нужно хранить посты (заголовок, тело, теги), авторов (имя, email) и комментарии. Используй встраивание для комментариев (до 50 на пост) и ссылки для авторов. Напиши JSON-схему и пример документа.
Пример результата:
{
"_id": ObjectId(),
"title": "Введение в MongoDB",
"body": "Текст поста...",
"tags": ["mongodb", "nosql"],
"author_id": ObjectId("..."),
"comments": [
{
"user_name": "Иван",
"text": "Отличная статья!",
"created_at": ISODate("2026-07-13T10:00:00Z")
}
],
"created_at": ISODate("2026-07-10T12:00:00Z")
}
1.4 Базовые команды Redis
Задача: Быстро получить шпаргалку по основным типам данных Redis.
Промт:
Ты — инструктор по Redis. Напиши примеры команд для работы со строками (SET/GET), списками (LPUSH, LRANGE), хешами (HSET, HGETALL) и множествами (SADD, SMEMBERS). Добавь короткий комментарий к каждой команде.
Пример результата:
# Строки
SET user:1:name "Alice"
GET user:1:name # "Alice"
# Списки
LPAGE queue "job1" "job2"
LRANGE queue 0 -1 # ["job1", "job2"]
# Хеши
HSET user:1 name "Bob" age 30
HGETALL user:1 # {name: "Bob", age: "30"}
# Множества
SADD tags "redis" "database"
SMEMBERS tags # ["redis", "database"]
Категория 2: Продвинутые промты (для опытных разработчиков)
2.1 Оптимизация запроса с помощью EXPLAIN ANALYZE
Задача: Проанализировать и исправить медленный JOIN.
Промт:
Ты — эксперт по PostgreSQL. Вот план запроса (EXPLAIN ANALYZE):
Sort (cost=1000.00..1200.00 rows=8000 width=100)
-> Hash Join (cost=500.00..800.00 rows=8000 width=100)
Hash Cond: (o.customer_id = c.id)
-> Seq Scan on orders o (cost=0.00..400.00 rows=8000 width=60)
-> Hash (cost=300.00..300.00 rows=2000 width=40)
-> Seq Scan on customers c (cost=0.00..300.00 rows=2000 width=40)
Запрос: SELECT * FROM orders o JOIN customers c ON o.customer_id = c.id WHERE o.status = 'pending'. Почему так медленно и что исправить?
Пример результата:
Проблема: Seq Scan на обеих таблицах из-за отсутствия индексов. Решение:
1. Создать индекс на orders(status) для фильтрации.
2. Создать индекс на orders(customer_id) для ускорения JOIN.
3. Возможно, добавить составной индекс: orders(status, customer_id).
После создания индексов ожидается переход на Index Scan и снижение времени запроса в 10-50 раз.
2.2 Миграция данных из PostgreSQL в MongoDB
Задача: Перенести реляционную схему в документную БД.
Промт:
Ты — архитектор данных. Нужно перенести таблицы users и orders из PostgreSQL в MongoDB. В реляционной схеме: users(id, name, email), orders(id, user_id, total, date). Напиши стратегию денормализации, пример агрегации для преобразования данных и скрипт на JavaScript для обёртки.
Пример результата:
Стратегия: встраиваем заказы в документ пользователя (до 100 заказов на пользователя).
Агрегация в PostgreSQL:
SELECT jsonb_build_object(
'name', u.name,
'email', u.email,
'orders', jsonb_agg(jsonb_build_object('total', o.total, 'date', o.date))
)
FROM users u
JOIN orders o ON o.user_id = u.id
GROUP BY u.id;
Скрипт для MongoDB:
const data = []; // результат агрегации из PG
const db = connect('mongodb://localhost:27017/mydb');
db.users.insertMany(data);
2.3 Настройка Redis как кеша для PostgreSQL
Задача: Реализовать кеширование частых запросов.
Промт:
Ты — DevOps-инженер. Нужно кешировать результаты запроса SELECT * FROM products WHERE category_id = 1 ORDER BY price LIMIT 20 в Redis на 5 минут. Напиши алгоритм на Python с использованием redis-py.
Пример результата:
import redis
import json
import psycopg2
from datetime import timedelta
r = redis.Redis(host='localhost', port=6379, db=0)
conn = psycopg2.connect("dbname=mydb user=user password=pass")
def get_products_by_category(category_id):
cache_key = f"products:category:{category_id}"
cached = r.get(cache_key)
if cached:
return json.loads(cached)
with conn.cursor() as cur:
cur.execute("""
SELECT id, name, price FROM products
WHERE category_id = %s
ORDER BY price LIMIT 20
""", (category_id,))
rows = cur.fetchall()
r.setex(cache_key, timedelta(minutes=5), json.dumps(rows))
return rows
2.4 Написание миграции с откатом
Задача: Создать миграцию для добавления колонки и индекса.
Промт:
Ты — разработчик PostgreSQL. Напиши миграцию (up и down) для добавления колонки discount DECIMAL(5,2) DEFAULT 0.00 в таблицу orders и индекса на эту колонку. Используй синтаксис, совместимый с инструментом Flyway.
Пример результата:
-- V1__Add_discount_column.sql
-- Up
ALTER TABLE orders ADD COLUMN discount DECIMAL(5,2) DEFAULT 0.00;
CREATE INDEX idx_orders_discount ON orders (discount);
-- Down
DROP INDEX IF EXISTS idx_orders_discount;
ALTER TABLE orders DROP COLUMN IF EXISTS discount;
Категория 3: Экспертные промты (для профессионалов)
3.1 Диагностика блокировок в PostgreSQL
Задача: Найти и устранить deadlock.
Промт:
Ты — эксперт по PostgreSQL. У нас возник deadlock. Вот pg_locks и pg_stat_activity. Напиши запрос для выявления блокирующих и заблокированных транзакций, а затем предложи стратегию разрешения.
pg_locks:
- transactionid 1234: granted
- transactionid 5678: waiting
pg_stat_activity:
- pid 100: query = UPDATE orders SET status='shipped' WHERE id=1; state = active
- pid 200: query = UPDATE inventory SET quantity=quantity-1 WHERE product_id=5; state = active
Пример результата:
SELECT
blocked.pid AS blocked_pid,
blocked.query AS blocked_query,
blocking.pid AS blocking_pid,
blocking.query AS blocking_query
FROM pg_stat_activity blocked
JOIN pg_locks l1 ON blocked.pid = l1.pid
JOIN pg_locks l2 ON l1.transactionid = l2.transactionid AND l1.granted = false
JOIN pg_stat_activity blocking ON l2.pid = blocking.pid;
Решение: Переписать транзакции так, чтобы порядок блокировки ресурсов был одинаковым (например, сначала orders, потом inventory). Или использовать таймаут deadlock_timeout.
3.2 Шардирование MongoDB
Задача: Спроектировать шардирование для коллекции с логами.
Промт:
Ты — администратор MongoDB. Нужно шардировать коллекцию logs (колонки: _id, user_id, action, timestamp). Данные растут на 10 ГБ в день. Выбери ключ шардирования, объясни выбор, и напиши команды для включения шардирования.
Пример результата:
Выбор ключа: timestamp (хешированный) — обеспечивает равномерное распределение по шардам без горячих точек.
Команды:
sh.enableSharding("mydb")
sh.shardCollection("mydb.logs", { timestamp: "hashed" })
sh.addShard("shard1.example.com:27017")
sh.addShard("shard2.example.com:27017")
3.3 Оптимизация Redis Cluster
Задача: Настроить кластер Redis для высокой доступности.
Промт:
Ты — SRE-инженер. Нужно настроить Redis Cluster из 6 нод (3 мастера, 3 реплики) на серверах с 8 ГБ RAM каждый. Напиши конфигурацию для каждого узла, команды для создания кластера и стратегию решардинга при добавлении нового узла.
Пример результата:
Конфигурация (redis.conf):
port 6379
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
Создание кластера:
redis-cli --cluster create 192.168.1.1:6379 192.168.1.2:6379 192.168.1.3:6379 \
192.168.1.4:6379 192.168.1.5:6379 192.168.1.6:6379 \
--cluster-replicas 1
Решардинг при добавлении нового узла:
redis-cli --cluster add-node new_node:6379 existing_node:6379
redis-cli --cluster rebalance new_node:6379
Заключение
Промты — это не магия, а инструмент, который требует понимания основ. Нейросеть не заменит опытного DBA, но может стать отличным помощником для генерации кода, диагностики и обучения. Главное — формулировать задачу чётко, указывать контекст и проверять результат.
Я рекомендую сохранить эти 15 промтов в личную шпаргалку. Со временем вы научитесь адаптировать их под свои задачи и создавать собственные. Помните: лучший промт — тот, который решает вашу конкретную проблему.
Если вы хотите углубиться в работу с базами данных и AI, обратите внимание на курсы, которые обучают интеграции нейросетей с PostgreSQL, MongoDB и Redis. Например, ASI Biont поддерживает подключение к PostgreSQL, MongoDB и Redis через API — подробнее на asibiont.com/courses. Также рекомендую официальную документацию PostgreSQL (postgresql.org/docs), MongoDB Manual (mongodb.com/docs/manual) и Redis Documentation (redis.io/docs/latest).
Удачи в оптимизации!
Комментарии