15 промтов для работы с базами данных: PostgreSQL, MongoDB, Redis — от запросов до оптимизации

Введение

Базы данных — это сердце любого современного приложения. Но даже опытные разработчики часто тратят часы на написание сложных запросов, настройку индексов или диагностику медленных операций. В 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).

Удачи в оптимизации!

← Все статьи

Комментарии

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

Интеграция Banana Pi с AI-агентом ASI Biont: автоматизация на одноплатнике без единой строки кода

14 июля 2026

Telegram Bot Development: как автоматизировать бизнес и заработать на ботах в 2026 году

14 июля 2026

AI-агент оживляет завод: интеграция Modbus RTU (RS-485) с ASI Biont для предиктивного обслуживания

14 июля 2026

Uber не хочет быть «всем для всех»: что на самом деле сказал продакт-директор про отели, роботакси и будущее платформы

14 июля 2026

Курс «Промышленный интернет вещей (IIoT) и системы SCADA»: ваш путь к Индустрии 4.0 в 2026 году

14 июля 2026

ИИ незаметно меняет мнения пользователей в соцсетях: как алгоритмы формируют нашу реальность

14 июля 2026

CKA + CKAD — Kubernetes Administrator & Developer: как подготовиться к сертификации в 2026 году с AI-тьютором

14 июля 2026

Как перестать терять сделки из-за языка: обзор курса «Английский для бизнеса» на asibiont.com

14 июля 2026

Трансформационное лидерство и стратегическое мышление CEO: Программа для основателей на уровне Гарварда, желающих овладеть принятием решений

14 июля 2026