Вы когда-нибудь тратили полдня на написание запроса, который можно было бы сгенерировать за минуту? Или пытались вспомнить, как оптимизировать медленный JOIN, пока начальник нетерпеливо постукивает пальцем? Если да — эта подборка для вас. Я собрал 12 проверенных промтов, которые реально экономят часы работы с PostgreSQL. Они покрывают всё: от генерации сложных запросов до оптимизации и визуализации данных. Никакой воды — только конкретика, которую можно скопировать и использовать прямо сейчас.
Эти промты — не магия, а результат практики. Я сам использую их в ежедневной работе, и они превратили рутину в удовольствие. Каждый промт снабжён примером и пояснением, как он ускоряет конкретную задачу. Погнали!
1. Генератор запросов по описанию на естественном языке
Задача: Превратить словесное описание в рабочий SQL-запрос. Идеально, когда вы знаете, что хотите получить, но не помните точный синтаксис или структуру таблиц.
Промт:
Ты — эксперт по PostgreSQL. Напиши SQL-запрос, который [опишите задачу]. Используй таблицы [список таблиц и их колонок]. Учти [дополнительные условия]. Верни только код без объяснений.
Пример: Допустим, нужно найти топ-10 клиентов по сумме заказов за последний месяц.
Ты — эксперт по PostgreSQL. Напиши SQL-запрос, который выводит топ-10 клиентов по сумме заказов за последний месяц. Таблицы: customers(id, name), orders(id, customer_id, amount, created_at). Верни только код.
Результат:
SELECT c.name, SUM(o.amount) AS total_amount
FROM customers c
JOIN orders o ON c.id = o.customer_id
WHERE o.created_at >= date_trunc('month', CURRENT_DATE) - INTERVAL '1 month'
AND o.created_at < date_trunc('month', CURRENT_DATE)
GROUP BY c.name
ORDER BY total_amount DESC
LIMIT 10;
Почему это ускоряет: Не нужно лезть в документацию или вспоминать синтаксис date_trunc — ИИ сделает это за вас. Вы просто описываете задачу человеческим языком.
2. Оптимизатор медленных запросов
Задача: Получить рекомендации по ускорению конкретного запроса. Вместо того чтобы вручную анализировать EXPLAIN ANALYZE, вы просите ИИ найти узкие места.
Промт:
Вот мой медленный запрос: [вставьте SQL]. Вот вывод EXPLAIN ANALYZE: [вставьте вывод]. Проанализируй и предложи конкретные улучшения: индексы, переписывание запроса, изменение схемы. Объясни, почему каждое изменение поможет.
Пример:
Вот мой медленный запрос: SELECT * FROM orders WHERE customer_id = 123 AND created_at > NOW() - INTERVAL '30 days';
Вот вывод EXPLAIN ANALYZE: [реальный вывод]. Проанализируй и предложи улучшения.
Результат: ИИ может предложить создать составной индекс (customer_id, created_at), потому что запрос фильтрует по обоим полям. Это ускорит поиск в разы.
Почему это ускоряет: Вы получаете готовый план действий, а не тратите часы на изучение документации по индексам и планировщику.
3. Генератор синтетических данных для тестирования
Задача: Быстро создать тестовые данные для проверки запросов или разработки без доступа к продакшену.
Промт:
Сгенерируй SQL для вставки 1000 тестовых строк в таблицу [название таблицы] с колонками [список колонок и типов]. Данные должны быть реалистичными: имена, даты в диапазоне [диапазон], числовые значения в диапазоне [диапазон]. Используй generate_series и random().
Пример:
Сгенерируй SQL для вставки 1000 тестовых строк в таблицу users (id serial, name text, email text, created_at timestamp). Имена — реалистичные, email — на основе имени, даты — за последний год. Используй generate_series.
Результат:
INSERT INTO users (name, email, created_at)
SELECT
'User ' || i,
'user'
|| i || '@example.com',
NOW() - (random() * INTERVAL '365 days')
FROM generate_series(1, 1000) AS i;
Почему это ускоряет: Не нужно писать скрипты на Python или вручную заполнять данные. Один промт — и у вас готовый набор для тестов.
4. Перевод MySQL в PostgreSQL
Задача: Перенести запрос или схему с MySQL на PostgreSQL. Синтаксис отличается, и руками это делать муторно.
Промт:
Переведи этот MySQL-запрос в PostgreSQL: [вставьте код]. Учти различия в функциях, типах данных и синтаксисе LIMIT. Верни только переведённый код.
Пример: MySQL: SELECT * FROM users LIMIT 10 OFFSET 5; — в PostgreSQL почти то же самое, но, например, GROUP BY и функции дат отличаются.
Результат: ИИ корректно заменит DATE_FORMAT на TO_CHAR, IFNULL на COALESCE, а AUTO_INCREMENT на SERIAL.
Почему это ускоряет: Миграция баз данных — это часы ручной работы. Промт сокращает её до минут.
5. Объяснение сложного запроса
Задача: Понять, что делает чужой или давно написанный запрос. Особенно полезно, когда нужно поддерживать легаси-код.
Промт:
Объясни, что делает этот SQL-запрос: [вставьте код]. Разбей на шаги, объясни каждую часть простыми словами, укажи, какие данные он возвращает и какие подводные камни могут быть.
Пример: Вставляете 20-строчный запрос с несколькими JOIN и подзапросами.
Результат: ИИ объяснит логику, упомянет, что LEFT JOIN может давать дубли, а EXISTS работает быстрее IN при больших объёмах.
Почему это ускоряет: Вместо того чтобы часами разбираться в чужом коде, вы получаете готовое объяснение.
6. Написание хранимой процедуры
Задача: Создать хранимую процедуру или функцию на PL/pgSQL для автоматизации рутинных операций.
Промт:
Напиши хранимую процедуру на PL/pgSQL, которая [описание задачи]. Используй параметры [список]. Добавь обработку ошибок и комментарии.
Пример: Процедура, которая обновляет статус заказа и пишет в лог-таблицу.
Напиши хранимую процедуру update_order_status(order_id int, new_status text), которая обновляет статус заказа и вставляет запись в order_log (order_id, old_status, new_status, changed_at). Добавь обработку исключений.
Результат: ИИ сгенерирует корректный код с BEGIN ... EXCEPTION ... END.
Почему это ускоряет: Хранимые процедуры часто пишутся по шаблону, а ИИ отлично знает эти шаблоны.
7. Создание представления (VIEW)
Задача: Создать представление для часто используемого запроса, чтобы упростить его повторное использование.
Промт:
Создай представление в PostgreSQL с именем [имя] на основе запроса: [вставьте SQL]. Учти, что представление должно быть материализованным или обычным? Объясни разницу в этом контексте.
Пример:
Создай представление active_customers на основе запроса: SELECT * FROM customers WHERE status = 'active';
Результат: ИИ предложит CREATE VIEW active_customers AS ... или CREATE MATERIALIZED VIEW ... и объяснит, когда что использовать.
Почему это ускоряет: Представления экономят время при повторяющихся запросах, а ИИ помогает их быстро создать.
8. Генерация отчёта в формате Markdown
Задача: Получить результаты запроса в виде красивого Markdown-отчёта для документации или презентации.
Промт:
Выполни этот запрос: [вставьте SQL]. Представь результаты в виде таблицы Markdown с заголовками колонок. Добавь краткое резюме под таблицей.
Пример:
SELECT department, COUNT(*) AS employees, AVG(salary) AS avg_salary FROM employees GROUP BY department;
Результат: ИИ оформит данные в таблицу `
| department | employees | avg_salary |` и добавит выводы.
Почему это ускоряет: Вы сразу получаете готовый отчёт для вставки в документацию, не тратя время на форматирование.
9. Написание запроса с рекурсивным CTE
Задача: Создать рекурсивный запрос для работы с иерархическими данными (деревья, графы).
Промт:
Напиши рекурсивный CTE в PostgreSQL для [задача: например, обход дерева категорий]. Таблица: [название, колонки]. Верни все уровни иерархии.
Пример: Таблица categories(id, parent_id, name). Нужно вывести все подкатегории для категории с id=1.
Результат:
WITH RECURSIVE subcategories AS (
SELECT id, parent_id, name, 1 AS level
FROM categories
WHERE id = 1
UNION ALL
SELECT c.id, c.parent_id, c.name, sc.level + 1
FROM categories c
JOIN subcategories sc ON c.parent_id = sc.id
)
SELECT * FROM subcategories;
Почему это ускоряет: Рекурсивные запросы сложно писать с нуля, а ИИ генерирует их за секунды.
10. Анализ плана выполнения (EXPLAIN)
Задача: Получить объяснение плана выполнения запроса и понять, почему он медленный.
Промт:
Вот вывод EXPLAIN ANALYZE для запроса: [вставьте вывод]. Объясни, что означает каждая часть, какие узкие места и как их исправить.
Пример: Вы вставляете вывод EXPLAIN ANALYZE и получаете разбор.
Результат: ИИ объяснит, что Seq Scan — это полное сканирование, предложит индекс, укажет на высокую стоимость.
Почему это ускоряет: Вы быстро понимаете, что тормозит, и принимаете меры.
11. Генерация кода для визуализации данных
Задача: Получить код на Python (matplotlib/plotly) для визуализации результатов SQL-запроса.
Промт:
Напиши код на Python с библиотекой [matplotlib/plotly] для визуализации данных из запроса: [вставьте SQL]. Выполни запрос через psycopg2, создай график [тип графика], подпиши оси.
Пример:
Напиши код на Python с библиотекой matplotlib для визуализации продаж по месяцам из запроса: SELECT date_trunc('month', created_at) AS month, SUM(amount) FROM orders GROUP BY month;. Выполни через psycopg2.
Результат: ИИ выдаст готовый скрипт с подключением к БД и построением графика.
Почему это ускоряет: Вы получаете сразу рабочий код для дашборда, не тратя время на изучение API библиотек.
12. Автоматизация рутинных задач с помощью триггеров
Задача: Создать триггер, который автоматически обновляет связанные данные при изменении в таблице.
Промт:
Создай триггер в PostgreSQL, который [описание события и действия]. Таблица: [название]. Напиши функцию на PL/pgSQL и привяжи триггер.
Пример: Триггер, который при вставке нового заказа обновляет сумму заказов клиента в таблице customers.
Результат: ИИ создаст функцию и триггер с BEFORE INSERT или AFTER INSERT.
Почему это ускоряет: Триггеры сложно писать вручную, а ИИ делает это быстро и без ошибок.
13. Преобразование JSON-данных
Задача: Извлечь данные из JSON-колонок или преобразовать их в реляционный вид.
Промт:
Напиши запрос в PostgreSQL для работы с JSON-данными в колонке [имя]: [описание задачи, например, извлечь поле name из массива объектов]. Используй jsonb_* функции.
Пример: Извлечь все email из JSON-массива.
Результат: ИИ использует jsonb_array_elements и ->> для извлечения.
Почему это ускоряет: JSON-запросы часто запутанны, а ИИ знает все функции.
14. Оптимизация схемы базы данных
Задача: Получить рекомендации по нормализации или денормализации схемы.
Промт:
Вот схема моей БД: [описание таблиц и связей]. Предложи улучшения: нормализация, индексы, типы данных. Объясни, как это повлияет на производительность.
Пример: Схема с дублирующимися данными.
Результат: ИИ предложит разбить таблицу, добавить внешние ключи, выбрать оптимальные типы.
Почему это ускоряет: Вы получаете готовый план рефакторинга, не тратя часы на анализ.
15. Написание запроса с оконными функциями
Задача: Создать запрос с оконными функциями (ROW_NUMBER, LAG, LEAD) для аналитических задач.
Промт:
Напиши запрос с оконной функцией [функция] для [задача: ранжирование, скользящее среднее]. Таблица: [описание]. Верни результат с дополнительной колонкой.
Пример: Ранжирование сотрудников по зарплате в каждом отделе.
Результат: ИИ использует ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC).
Почему это ускоряет: Оконные функции сложны для новичков, а ИИ генерирует их моментально.
16. Генерация тестов для проверки запросов
Задача: Создать набор тестовых запросов для проверки корректности функции или процедуры.
Промт:
Напиши несколько SQL-запросов для тестирования функции [имя] со следующими сценариями: [список]. Включи крайние случаи (NULL, пустые значения).
Пример: Тесты для функции расчёта скидки.
Результат: ИИ выдаст запросы с SELECT function(...) и ожидаемыми результатами.
Почему это ускоряет: Вы быстро покрываете основные сценарии, не забывая о граничных случаях.
17. Написание запроса для анализа временных рядов
Задача: Сгенерировать запрос для агрегации данных по времени (дневные, недельные, месячные отчёты).
Промт:
Напиши запрос для анализа временных рядов: агрегируй [показатель] по [интервал: день/неделя/месяц] за последний [период]. Таблица: [описание]. Используй date_trunc.
Пример: Ежедневные продажи за последние 30 дней.
Результат: ИИ использует date_trunc('day', created_at) и GROUP BY.
Почему это ускоряет: Анализ временных рядов — часто встречающаяся задача, и ИИ решает её без ошибок.
18. Помощь в отладке ошибок
Задача: Разобраться с ошибкой PostgreSQL и найти решение.
Промт:
Я получил ошибку PostgreSQL: [вставьте текст ошибки]. Контекст: [описание запроса или действия]. Объясни причину и предложи решение.
Пример: Ошибка "relation does not exist" при выполнении запроса.
Результат: ИИ объяснит, что, вероятно, не указана схема, и предложит SET search_path или уточнение имени.
Почему это ускоряет: Вместо гугления ошибки вы получаете ответ сразу.
Эти промты — ваш швейцарский нож для работы с PostgreSQL. Они не заменяют глубоких знаний, но снимают рутину и позволяют сосредоточиться на действительно сложных задачах. Сохраните статью в закладки и используйте как шпаргалку — я уверен, вы не раз к ней вернётесь. А если у вас есть свои любимые промты — делитесь в комментариях, обсудим!
Комментарии