Промты для работы с базами данных: PostgreSQL, MongoDB, Redis

{
"title": "12 промтов для работы с базами данных: PostgreSQL, MongoDB, Redis",
"content": "## Введение\n\nБазы данных — основа любого современного приложения. Но даже опытные разработчики тратят часы на написание сложных запросов, отладку индексов и миграции. AI-ассистенты вроде ChatGPT позволяют сократить это время до минут — если правильно составить промт. В этой подборке — 12 проверенных промтов для PostgreSQL, MongoDB и Redis. Каждый с примером, кодом и рекомендациями. Используйте их как шпаргалку: копируйте, адаптируйте под свою схему и получайте готовый код за секунды.\n\n---\n\n## PostgreSQL: запросы, индексы, миграции\n\n### 1. Генерация запроса с оконными функциями\nКогда использовать: нужно ранжировать данные, посчитать скользящее среднее или накопительный итог.\n\nПромт:\n> «Напиши SQL-запрос для PostgreSQL, который для таблицы sales (поля: id, product_id, amount, sale_date) выводит: дату, сумму продаж, накопительную сумму за текущий месяц. Используй оконную функцию SUM() OVER (PARTITION BY date_trunc('month', sale_date) ORDER BY sale_date). Добавь сортировку по дате.»\n\nПример ответа AI:\nsql\nSELECT\n sale_date,\n amount,\n SUM(amount) OVER (\n PARTITION BY date_trunc('month', sale_date)\n ORDER BY sale_date\n ) AS monthly_running_total\nFROM sales\nORDER BY sale_date;\n\n\nСовет: Всегда проси AI добавить EXPLAIN ANALYZE перед запросом — так вы увидите, использует ли он индексы.\n\n### 2. Оптимизация медленного запроса с помощью EXPLAIN\nКогда использовать: запрос выполняется > 1 секунды, нужно понять причину.\n\nПромт:\n> «Вот план выполнения запроса (вставьте вывод EXPLAIN ANALYZE). Дай рекомендации по оптимизации: какие индексы создать, как переписать JOIN, избежать Seq Scan. Учти, что таблица orders содержит 5 млн строк.»\n\nПример пользы: AI определит, что не хватает индекса на customer_id и предложит:\nsql\nCREATE INDEX idx_orders_customer_id ON orders(customer_id);\n\n\n### 3. Написание миграции с безопасным ALTER TABLE\nКогда использовать: нужно добавить колонку или изменить тип без блокировки.\n\nПромт:\n> «Напиши миграцию для PostgreSQL, которая добавляет колонку email_verified тип boolean с дефолтом false в таблицу users. Используй блокировку NOT VALID, чтобы не блокировать запись. Затем добавь CHECK-ограничение и заполни данные для существующих строк.»\n\nОтвет:\nsql\nALTER TABLE users ADD COLUMN email_verified boolean DEFAULT false;\nALTER TABLE users ADD CONSTRAINT chk_email_verified CHECK (email_verified IN (true, false)) NOT VALID;\n-- После этого в фоне обновить данные:\nUPDATE users SET email_verified = (email IS NOT NULL);\n\n\n### 4. Создание составного индекса для фильтрации и сортировки\nКогда использовать: частые запросы с WHERE и ORDER BY по разным колонкам.\n\nПромт:\n> «У меня таблица transactions с колонками user_id, created_at, amount. Самый частый запрос: SELECT * FROM transactions WHERE user_id = ? ORDER BY created_at DESC LIMIT 10. Какой индекс создать? Напиши CREATE INDEX.»\n\nОтвет:\nsql\nCREATE INDEX idx_transactions_user_id_created_at\nON transactions(user_id, created_at DESC);\n\n\n---\n\n## MongoDB: агрегации, индексы, миграции\n\n### 5. Сложный пайплайн агрегации с $lookup и $group\nКогда использовать: нужно объединить данные из нескольких коллекций и посчитать статистику.\n\nПромт:\n> «Напиши агрегацию MongoDB для коллекций orders (поля: _id, customer_id, total) и customers (поля: _id, name, city). Выведи для каждого города: количество заказов и средний чек. Используй $lookup, $group, $project.»\n\nРезультат:\njavascript\ndb.orders.aggregate([\n { $lookup: { from: \"customers\", localField: \"customer_id\", foreignField: \"_id\", as: \"customer\" } },\n { $unwind: \"$customer\" },\n { $group: { _id: \"$customer.city\", count: { $sum: 1 }, avgTotal: { $avg: \"$total\" } } },\n { $project: { city: \"$_id\", count: 1, avgTotal: { $round: [\"$avgTotal\", 2] }, _id: 0 } }\n]);\n\n\n### 6. Оптимизация через создание индекса с частичным условием\nКогда использовать: большая коллекция, но запросы фильтруют только часть документов.\n\nПромт:\n> «В коллекции logs 100 млн документов. Большинство запросов ищут логи за последние 7 дней: { timestamp: { $gte: <7_days_ago> }, level: \"error\" }. Создай частичный индекс, который будет покрывать только эти условия.»\n\nОтвет:\njavascript\ndb.logs.createIndex(\n { timestamp: -1, level: 1 },\n { partialFilterExpression: { level: \"error\" } }\n);\n\n\n### 7. Миграция данных с изменением схемы (rename, add fields)\nКогда использовать: нужно переименовать поле или добавить новое во все документы.\n\nПромт:\n> «Напиши скрипт миграции для MongoDB, который переименовывает поле name в full_name и добавляет поле updated_at с текущей датой для всех документов коллекции profiles. Используй bulkWrite для производительности.»\n\nКод:\njavascript\ndb.profiles.bulkWrite([\n {\n updateMany: {\n filter: {},\n update: {\n $rename: { \"name\": \"full_name\" },\n $set: { updated_at: new Date() }\n }\n }\n }\n]);\n\n\n### 8. Поиск с full-text индексом и весами\nКогда использовать: нужно ранжировать результаты поиска по релевантности.\n\nПромт:\n> «Создай текстовый индекс в MongoDB для коллекции articles на полях title (вес 10) и body (вес 1). Напиши запрос, который ищет слово “performance” и сортирует по текстовой релевантности.»\n\nИндекс:\njavascript\ndb.articles.createIndex(\n { title: \"text\", body: \"text\" },\n { weights: { title: 10, body: 1 }, name: \"TextIndex\" }\n);\n\nЗапрос:\njavascript\ndb.articles.find({ $text: { $search: \"performance\" } }).sort({ score: { $meta: \"textScore\" } });\n\n\n---\n\n## Redis: ключи, TTL, пайплайны, оптимизация памяти\n\n### 9. Создание структуры для кэша с TTL и инвалидацией\n\nКогда использовать: нужно кэшировать данные на 5 минут и автоматически удалять.\n\nПромт:\n> «Напиши команды Redis, чтобы сохранить JSON-объект (например, профиль пользователя) в виде хеша с ключом user:123. Установи TTL 300 секунд. Покажи, как обновить одно поле без сброса TTL.»\n\nОтвет:\nredis\nSET user:123 '{\"name\":\"Alice\",\"age\":30}' EX 300\n# Или для хеша:\nHSET user:123 name \"Alice\" age 30\nEXPIRE user:123 300\n# Обновление поля:\nHSET user:123 age 31\n# TTL остался прежним, если не вызван EXPIRE заново\n\n\n### 10. Пайплайн для массовой вставки данных\n\nКогда использовать: нужно загрузить 100 000 записей быстро.\n\nПромт:\n> «Напиши пример на Python с redis-py, который использует pipeline для вставки 10 000 пар ключ-значение. Сравни с обычной вставкой по одному.»\n\nКод:\npython\nimport redis\nr = redis.Redis()\npipe = r.pipeline()\nfor i in range(10000):\n pipe.set(f\"key:{i}\", f\"value:{i}\")\npipe.execute() # Отправляет все за один раз\n\nСовет: Пайплайн ускоряет вставку в 10-50 раз за счёт уменьшения RTT (Wikipedia: Redis pipelining).\n\n### 11. Использование SETNX для распределённой блокировки\n\nКогда использовать: нужно синхронизировать доступ к ресурсу между несколькими инстансами.\n\nПромт:\n> «Напиши скрипт Lua для Redis, который реализует распределённую блокировку с автоматическим снятием по TTL. Команда SETNX + EXPIRE атомарно с помощью EVAL.»\n\nСкрипт:\nlua\nif redis.call(\"SETNX\", KEYS[1], ARGV[1]) == 1 then\n return redis.call(\"EXPIRE\", KEYS[1], ARGV[2])\nelse\n return 0\nend\n\nВызов: EVAL script 1 lock:myresource "owner" 10 — блокировка на 10 секунд.\n\n### 12. Оптимизация памяти: анализ ключей и удаление мусора\n\nКогда использовать: Redis использует слишком много RAM, нужно найти большие ключи.\n\nПромт:\n> «Дай команду Redis, которая сканирует все ключи и находит top-10 по размеру значения. Используй DEBUG OBJECT и SORT. Учти, что у меня 500 тыс. ключей.»\n\nРешение: Используйте redis-cli --bigkeys (встроенная утилита). Но можно и промптом:\nbash\nredis-cli --eval find_big_keys.lua\n\nГде Lua-скрипт перебирает ключи через SCAN и сохраняет самые большие.\n\nРекомендация: Включите activedefrag yes в конфиге Redis 3.2+ для автоматической дефрагментации (официальная документация: Redis Memory Optimization).\n\n---\n\n## Заключение\n\nЭти 12 промтов — лишь малая часть того, что можно автоматизировать с помощью AI. Главное — формулировать задачу конкретно: указывать СУБД, схему, ожидаемый результат. Скопируйте понравившийся промт, подставьте свои названия таблиц и получите рабочий код за 10 секунд. А если хотите углубиться — изучайте официальную документацию каждой БД: PostgreSQL, MongoDB, Redis. Пробуйте, тестируйте, делитесь результатами в комментариях!",
"excerpt": "12 проверенных промтов для PostgreSQL, MongoDB и Redis: генерация запросов, оптимизация индексов, миграции данных. Каждый промт с примером кода и практическими советами. Ускорьте работу с базами данных с помощью AI."
}

← Все статьи

Комментарии

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

Как сдать Cambridge International A-Level Physics (9702) на A*: полный разбор курса от Asibiont

27 июля 2026

Cambridge International A-Level Mathematics (9709) — полный разбор программы и AI-обучение на Asibiont

27 июля 2026

Освойте самостоятельное исследование с Cambridge IPQ (Independent Project Qualification): Полное руководство

27 июля 2026

Вайб кодинг: как создавать приложения с помощью ChatGPT, Claude и Cursor — обзор курса на Asibiont

27 июля 2026

Интеграция Siemens S7 с AI-агентом ASI Biont: Промышленная автоматизация без кода

27 июля 2026

Освойте Cambridge IGCSE ESL (0511) с персонализированными уроками на основе ИИ: ваш путь к уверенному общению на английском

27 июля 2026

Cambridge IGCSE Биология (0610): ваше полное руководство по курсу Asibiont.com

27 июля 2026

Employee Agents vs. Customer-Facing Agents: в чем разница и как выбрать стратегию для бизнеса

27 июля 2026

Освойте управление конфиденциальностью и GDPR: ваше руководство по двойному курсу сертификации CIPM / CIPP/E от IAPP

27 июля 2026