SQL от AI — как вы проверяете, не сливает ли он базу?
Короче, сижу я часто на Copilot, OpenAI и прочих штуках, и мало ли что они подсовывают в итоге. SQL они генерят вроде быстро, но с точки зрения безопасности и адекватности запроса — это отдельная тема.
Что лично делаю я, чтобы не получить потом пожары на проде:
1. Сначала просто внимательно смотрю на синтаксис, чтобы не было явных ошибок типа лишних запятых или неожиданного JOIN без ключа. Порой AI может вставить что-то странное.
2. Проверяю, что запрос не затрагивает лишние таблицы или поля. Особенно если запрос сложный и включает UNION, вложенные подзапросы — тут можно легко угодить в неожиданности.
3. Прогоняю запросы сначала на тесте, а не сразу в живую базу. Лучше потратить 2 минуты, чем потом ковыряться в бэкапах.
4. Обращаю внимание на условия WHERE: часто AI пропускает их или делает не то, что надо, и запрос становится "слишком жадным".
5. Для SELECT иногда отдельно проверяю EXPLAIN, чтобы понять, как база собирается выполнять этот запрос — вдруг есть костыли или полный перебор.
6. Если есть возможность — прохожу через линки к ORM (например, SQLAlchemy или Eloquent) и смотрю, что там выйдет по тому же логическому сценарию.
Часто просто бегло читаю запрос на предмет лишних JOIN или отсутствия WHERE, которые могут случайно сливать весь табличный объём. Ещё запускаю в тестовой базе — чтобы не обжечься на проде из-за каких-то пропущенных условий. Спамить AI запросами тоже не стоит, лучше по чуть-чуть и с проверкой.
С одной стороны, проверка запроса важна, но полагаться только на визуальный осмотр и тестовую базу не всегда спасёт. AI может выдать вполне корректный на вид код, который на практике будет грузить или выводить непредсказуемый объём данных. Тут надо комбинировать и логи, и мониторинг нагрузки, а не только беглый просмотр.