Вы когда-нибудь просыпались в 3 часа ночи от мысли «почему этот запрос выполняется 10 секунд?»? Я — да. Оптимизация PostgreSQL часто напоминает археологические раскопки: копаешься в планах запросов, индексах, настройках, а результат — как повезет. Но что, если у вас есть помощник, который не спит, не устает и знает документацию наизусть? Речь о промтах для нейросетей. Правильно составленный промт — это не просто просьба, а точное ТЗ, которое превращает LLM в эксперта по базам данных.
В этой статье я собрал 12 проверенных промтов, которые реально экономят часы работы. Они покрывают все: от диагностики медленных запросов до проектирования схем и автоматизации рутины. Каждый промт можно скопировать и использовать сразу — я проверил их на своих проектах. Поехали!
Почему промты работают для PostgreSQL?
LLM обучены на огромном корпусе текстов, включая документацию PostgreSQL, форумы и реальные кейсы. Они могут анализировать планы запросов, предлагать индексы и писать оптимизированные версии SQL. Главное — дать им контекст и четкие инструкции. Промт — это мост между вашей болью и знаниями модели.
12 промтов, которые изменят вашу работу с БД
1. Диагностика медленного запроса
Задача: Понять, почему конкретный запрос тормозит, и получить план исправлений.
Проанализируй следующий SQL-запрос и план выполнения (EXPLAIN ANALYZE). Определи узкие места, предложи конкретные улучшения (индексы, переписывание запроса, изменение настроек). Ответ структурируй так: 1) Диагноз, 2) Причины, 3) Рекомендации с примерами кода.
Запрос: [вставьте ваш SQL]
План: [вставьте вывод EXPLAIN ANALYZE]
Пример: Вы вставили запрос с JOIN трех таблиц и увидели Seq Scan на большой таблице. Промт подскажет создать индекс и переписать JOIN.
2. Генерация индексов для существующей схемы
Задача: Получить список индексов, которые ускорят ваши типичные запросы.
Вот схема таблиц: [CREATE TABLE ...]. Вот список частых запросов: [SQL]. Предложи оптимальные индексы (B-tree, GIN, BRIN и т.д.) с обоснованием. Учти, что лишние индексы замедляют запись.
Пример: Для таблицы с JSONB-полем и фильтрацией по дате промт предложит GIN-индекс для JSONB и композитный B-tree для (date, user_id).
3. Оптимизация сложного JOIN
Задача: Упростить и ускорить запрос с множественными JOIN.
Перепиши этот запрос так, чтобы он выполнялся быстрее: [SQL]. Объясни, какие изменения ты сделал и почему. Обрати внимание на возможность использования оконных функций, CTE или агрегатов.
Пример: Запрос с тремя JOIN и подзапросом в WHERE промт перепишет через JOIN LATERAL или оконную функцию.
4. Разбор EXPLAIN ANALYZE
Задача: Интерпретировать вывод планировщика.
Я новичок в PostgreSQL. Объясни этот вывод EXPLAIN ANALYZE простыми словами: [вывод]. Укажи, какие операции самые дорогие, и что они означают. Дай рекомендации по оптимизации.
Пример: Промт объяснит, что "Hash Join" — это нормально, но "Sort" на большом объеме — плохо, и предложит индекс.
5. Выявление проблем с блокировками
Задача: Найти взаимоблокировки и способы их избежать.
Вот SQL-запросы, которые вызывают deadlock: [SQL]. Объясни, почему возникает взаимоблокировка, и предложи решение (порядок блокировок, SELECT FOR UPDATE и т.д.).
Пример: Промт посоветует всегда блокировать строки в одном порядке или использовать уровень изоляции READ COMMITTED.
6. Проектирование схемы под highload
Задача: Спроектировать схему БД для высоконагруженного сервиса.
Спроектируй схему PostgreSQL для [описание проекта]. Учти: [требования к нагрузке, целостности, шардированию]. Для каждой таблицы дай DDL, комментарии и обоснование выбора типов данных. Добавь индексы и партиционирование, если нужно.
Пример: Для соцсети промт предложит партиционирование постов по дате, индексы для ленты, внешние ключи с ON DELETE CASCADE.
7. Помощь в написании сложных запросов
Задача: Сгенерировать SQL для нетривиальной выборки.
Напиши SQL-запрос для PostgreSQL, который [описание задачи]. Учитывай [особенности, например, NULL, дубликаты, производительность]. Покажи несколько вариантов с пояснениями.
Пример: "Найди топ-5 пользователей за последний месяц по сумме заказов, исключая тестовые аккаунты" — промт выдаст запрос с GROUP BY и HAVING.
8. Анализ производительности и настройка конфигурации
Задача: Подобрать параметры postgresql.conf под ваше железо.
У меня сервер с [CPU/RAM/диски], версия PostgreSQL [X]. Какие значения для shared_buffers, work_mem, effective_cache_size и других параметров оптимальны? Обоснуй.
Пример: Промт порекомендует shared_buffers = 25% от RAM, work_mem = 32MB и т.д., ссылаясь на официальные руководства.
9. Объяснение и оптимизация запросов с подзапросами
Задача: Улучшить медленный запрос с EXISTS/NOT EXISTS.
Вот запрос с подзапросами: [SQL]. Проверь, можно ли заменить его на JOIN или LEFT JOIN с условием. Предложи оптимизированную версию с объяснением.
Пример: NOT EXISTS на большой таблице заменится на LEFT JOIN WHERE ... IS NULL, что быстрее.
10. Генерация тестовых данных
Задача: Создать реалистичные данные для проверки запросов.
Сгенерируй SQL для вставки 1000 тестовых записей в таблицы: [схема]. Данные должны быть реалистичными (имена, даты, числа). Используй generate_series и random().
Пример: Промт создаст INSERT с generate_series для наполнения таблицы пользователей.
11. Помощь с миграциями
Задача: Написать безопасную миграцию для изменения схемы.
Напиши миграцию для PostgreSQL для [описание изменения, например, добавление колонки с дефолтом и бэкофиллом]. Учти, что таблица большая, поэтому нужен безопасный способ (ADD COLUMN IF NOT EXISTS, UPDATE батчами).
Пример: Для добавления NOT NULL колонки промт предложит добавить с дефолтом, затем UPDATE, затем ALTER COLUMN SET NOT NULL.
12. Обучение и объяснение концепций
Задача: Быстро разобраться в новой теме (например, в GIN-индексах).
Объясни [тема, например, GIN-индексы] в PostgreSQL. Дай определение, пример создания, когда использовать, а когда нет. Приведи ссылки на официальную документацию.
Пример: Промт объяснит, что GIN-индексы ускоряют полнотекстовый поиск и JSONB, и приведет пример из документации.
Как я тестировал эти промты
Я прогнал каждый промт на реальных задачах из своей практики: оптимизация запросов для CRM, проектирование схемы для IoT-платформы, настройка прод-сервера. В 80% случаев результаты были полезными и применимыми. Главное — давать модели достаточно контекста и проверять ее рекомендации.
Заключение
Промты не заменят опытного DBA, но они снимают рутину и ускоряют поиск решений. Начните с одного-двух промтов из списка, адаптируйте под свои задачи — и вы почувствуете, как оптимизация перестает быть скучной. А если у вас есть свои любимые промты — поделитесь в комментариях!
Комментарии