7 промтов для PostgreSQL, которые превращают ручную выгрузку в автоматический отчёт

Вы когда-нибудь тратили полдня на один SQL-запрос, а потом оказывалось, что нужно было просто добавить LEFT JOIN? Знакомая боль. Я тоже через это проходил, пока не начал активно использовать ИИ-промты для работы с базами данных. Однажды мой коллега — аналитик в крупном банке — пожаловался, что еженедельные отчёты по клиентским транзакциям занимают у него по 6 часов: он вручную писал сложные запросы с множественными джойнами, подзапросами и оконными функциями. Я поделился с ним подборкой промтов, которые использую сам, и через месяц он сказал, что теперь укладывается в 20 минут. В этой статье я собрал 9 проверенных промтов, которые реально экономят часы. Каждый — с примером, как я его применяю в работе.

1. Промт для объяснения сложного запроса

Когда использовать: Когда вы получаете чужой SQL-код или возвращаетесь к своему старому запросу и не понимаете, что там происходит.

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

Пример промта:

Объясни следующий SQL-запрос для аналитика, который знает SQL, но не знаком с бизнес-логикой. Разбей на шаги и поясни, что делает каждая часть:

WITH monthly_sales AS (
  SELECT 
    DATE_TRUNC('month', order_date) AS month,
    product_id,
    SUM(amount) AS total_amount
  FROM orders
  WHERE status = 'completed'
  GROUP BY 1, 2
),
ranked_products AS (
  SELECT *,
    ROW_NUMBER() OVER (PARTITION BY month ORDER BY total_amount DESC) AS rn
  FROM monthly_sales
)
SELECT month, product_id, total_amount
FROM ranked_products
WHERE rn <= 3;

Что делает ИИ: Он объяснит, что запрос сначала агрегирует продажи по месяцам и продуктам, затем ранжирует продукты по сумме продаж в каждом месяце и оставляет только топ-3. Вы быстро поймёте логику и сможете найти потенциальные ошибки.

Мой совет: Используйте этот промт, когда берёте в работу легаси-код. Это сэкономит вам часы разбора чужих мыслей.

2. Промт для оптимизации медленного запроса

Когда использовать: Когда запрос выполняется слишком долго, и нужно его ускорить.

Суть промта: Попросите ИИ найти узкие места и предложить оптимизации.

Пример промта:

Вот SQL-запрос, который выполняется 45 секунд на таблице с 10 миллионами строк. Проанализируй его и предложи конкретные оптимизации: индексы, переписывание JOIN, разбиение на подзапросы и т.д. Объясни, почему каждая оптимизация поможет.

SELECT c.customer_name, SUM(o.amount) AS total_spent
FROM customers c
LEFT JOIN orders o ON c.customer_id = o.customer_id
WHERE o.order_date >= '2025-01-01'
AND c.country = 'Россия'
GROUP BY c.customer_name
ORDER BY total_spent DESC;

Что делает ИИ: Он заметит, что фильтр по order_date в WHERE превращает LEFT JOIN в INNER JOIN (так как условие на правую таблицу), и предложит перенести условие в JOIN. Также посоветует создать составной индекс на orders(customer_id, order_date). В итоге запрос может ускориться в разы.

Мой опыт: Я часто использую этот промт для запросов, которые работают дольше 10 секунд. Обычно ИИ находит 2-3 улучшения, и время выполнения падает в 5-10 раз.

3. Промт для генерации SQL по описанию на естественном языке

Когда использовать: Когда нужно быстро получить запрос под конкретную задачу, особенно если вы не уверены в синтаксисе.

Суть промта: Опишите задачу словами, укажите структуру таблиц, и ИИ напишет SQL.

Пример промта:

У меня есть таблицы:
- students (id, name, group_id)
- groups (id, name)
- grades (student_id, subject, score, date)

Напиши SQL-запрос, который выводит для каждой группы средний балл по математике за последний семестр (даты с '2026-02-01' по '2026-05-31'). Отсортируй по убыванию среднего балла.

Что делает ИИ: Сгенерирует запрос вроде:

SELECT g.name, AVG(gr.score) AS avg_score
FROM groups g
JOIN students s ON g.id = s.group_id
JOIN grades gr ON s.id = gr.student_id
WHERE gr.subject = 'математика'
AND gr.date BETWEEN '2026-02-01' AND '2026-05-31'
GROUP BY g.name
ORDER BY avg_score DESC;

Мой совет: Всегда проверяйте сгенерированный код на небольших данных, но в 90% случаев он работает с первого раза.

4. Промт для поиска ошибок в запросе

Когда использовать: Когда запрос возвращает неожиданные результаты или ошибку.

Суть промта: Вставьте запрос и опишите проблему — ИИ найдёт логические ошибки.

Пример промта:

Этот запрос должен выводить клиентов, у которых нет заказов за последние 30 дней, но он возвращает пустой результат. Найди ошибку.

SELECT * FROM customers
WHERE customer_id NOT IN (
  SELECT customer_id FROM orders
  WHERE order_date > CURRENT_DATE - INTERVAL '30 days'
);

Что делает ИИ: Укажет, что NOT IN не работает, если подзапрос возвращает NULL (например, если есть заказы с customer_id = NULL). Предложит использовать NOT EXISTS.

Мой опыт: Это один из самых частых кейсов. Промт экономит мне время на отладке.

5. Промт для написания оконных функций

Когда использовать: Когда нужны ранжирование, скользящие средние или кумулятивные суммы.

Суть промта: Опишите задачу, и ИИ напишет оконную функцию с правильным синтаксисом.

Пример промта:

У меня есть таблица sales (id, product_id, sale_date, amount). Напиши запрос, который для каждого продукта выводит накопительную сумму продаж по датам. Используй оконную функцию.

Что делает ИИ: Сгенерирует:

SELECT 
  product_id, 
  sale_date, 
  amount,
  SUM(amount) OVER (PARTITION BY product_id ORDER BY sale_date) AS cumulative_sum
FROM sales;

Мой совет: Если вы не уверены в синтаксисе ROWS BETWEEN или RANGE, попросите ИИ объяснить различия.

6. Промт для переписывания подзапросов в JOIN

Когда использовать: Когда запрос с подзапросами работает медленно, а нужно ускорить.

Суть промта: Попросите ИИ переписать запрос с использованием JOIN.

Пример промта:

Перепиши следующий запрос, используя JOIN вместо подзапросов. Объясни, почему JOIN может быть эффективнее.

SELECT * FROM products
WHERE category_id IN (
  SELECT category_id FROM categories
  WHERE active = true
);

Что делает ИИ: Предложит:

SELECT p.*
FROM products p
JOIN categories c ON p.category_id = c.category_id
WHERE c.active = true;

Мой опыт: Это помогает не только ускорить запрос, но и сделать его читабельнее.

7. Промт для создания тестовых данных

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

Суть промта: Попросите ИИ написать скрипт генерации данных.

Пример промта:

Сгенерируй SQL-скрипт для вставки 100 тестовых строк в таблицу employees (id, name, department, salary). Данные должны быть реалистичными: разные отделы, зарплаты от 30000 до 150000, имена российские.

Что делает ИИ: Выдаст скрипт с INSERT и GENERATE_SERIES или просто набором значений. Это удобно для проверки логики без реальных данных.

Мой совет: Используйте этот промт, когда нужно быстро проверить гипотезу, не дожидаясь доступа к продакшену.

8. Промт для документирования запроса

Когда использовать: Когда нужно добавить комментарии к сложному запросу для коллег или будущего себя.

Суть промта: Попросите ИИ добавить пояснения к каждой части запроса.

Пример промта:

Добавь подробные комментарии к этому запросу, чтобы новичок в команде мог понять его логику. Не меняй сам SQL.

SELECT 
  product_category,
  COUNT(*) AS total_orders,
  AVG(order_amount) AS avg_amount
FROM orders
WHERE order_date >= '2026-01-01'
GROUP BY product_category
HAVING COUNT(*) > 100;

Что делает ИИ: Добавит комментарии вроде -- Фильтруем заказы за текущий год, -- Группируем по категориям и т.д. Это улучшает поддерживаемость кода.

9. Промт для обучения и разбора новых функций

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

Суть промта: Попросите ИИ объяснить функцию на примере.

Пример промта:

Объясни, как работает функция STRING_AGG в PostgreSQL, с примером использования. Покажи, как с её помощью вывести список имен через запятую для каждого отдела.

Что делает ИИ: Расскажет, что STRING_AGG агрегирует строки, покажет синтаксис и пример:

SELECT department, STRING_AGG(name, ', ')
FROM employees
GROUP BY department;

Мой опыт: Это отличный способ быстро освоить новые возможности СУБД без чтения длинной документации.

Как я применяю эти промты в работе

Я работаю с PostgreSQL ежедневно. Мой типичный рабочий процесс: сначала формулирую задачу на естественном языке, получаю черновой запрос, затем прогоняю его через оптимизатор (промт №2) и тестирую на выборке. Это сокращает время разработки отчёта с нескольких часов до 30-40 минут. Для сложных аналитических задач использую промт №5 для оконных функций — они часто оказываются производительнее групповых агрегаций.

Итог

Эти 9 промтов — мой минимальный набор для ежедневной работы с SQL. Они не заменяют понимания баз данных, но снимают рутину и ускоряют процесс. Начните с одного-двух, которые ближе к вашим задачам, и вы увидите разницу. А если у вас есть свои проверенные промты — делитесь в комментариях, я всегда рад пополнить коллекцию.

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

← Все статьи

Комментарии

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