Перейти к содержимому

ИИ для баз данных: генерация SQL и работа с БД

ИИ для баз данных — это генерация SQL по описанию задачи, объяснение и отладка запросов, проектирование схем и агенты, которые сами подключаются к базе через MCP-серверы и выполняют запросы. Разбираем промпты, безопасность (read-only режим, никаких прав на прод) и типовые ошибки — например, галлюцинации имён колонок.

Запрос к базе — самая частая рутина разработчика, аналитика и тестировщика. Написать SQL по описанию задачи, объяснить, почему запрос медленный, спроектировать схему под новую фичу. В 2026 году эти задачи берут на себя агенты, которые сами подключаются к базе данных, читают схему и выполняют запросы, — а обычные чат-боты, выдающие код для копирования, уходят на второй план. Разберём, как это работает, где границы и как не дать агенту натворить дел.

Что умеет ИИ в базах данных

Четыре типовые задачи, которые закрывает современная языковая модель.

1. Генерация SQL по описанию. Вы описываете задачу словами, модель возвращает запрос. Чем точнее схема таблиц в промпте, тем надёжнее результат — об этом ниже в разделе про типовые ошибки.

2. Объяснение и отладка запросов. Модель объясняет, что делает чужой SQL, находит ошибки, упрощает вложенные подзапросы, подсказывает, где не хватает индекса.

3. Проектирование схем. Сгенерировать таблицы под описание, спроектировать миграцию, добавить ограничения и внешние ключи. Агент с доступом к существующей базе сперва изучит текущую схему и предложит миграцию с учётом реальных таблиц.

4. Агент, который сам ходит в базу. Через MCP агент получает инструменты: выполнить запрос, посмотреть схему, посчитать план выполнения. Тогда диалог выглядит так: «сколько заказов за месяц?» — агент сам пишет SQL, выполняет его и возвращает цифру.

Разница между чат-ботом и агентом — в доступе:

Чат-бот (ChatGPT, Gemini) Агент с MCP-сервером БД
Видит схему базы Нет, только то, что вы вставили в промпт Да, через инструменты и ресурсы сервера
Выполняет SQL Нет, код нужно копировать в клиент Да, сам запускает запрос и возвращает результат
Проверяет результат Нет Да: ошибка запроса попадает обратно, агент её чинит
Главный риск Угадывает имена колонок Те же галлюцинации плюс право выполнить запрос

Как агент подключается к базе данных

Соединение идёт через MCP-сервер: отдельный процесс, который знает протокол, держит подключение к базе и отдаёт агенту набор инструментов. Агент — Claude Code, OpenCode, Cursor — говорит с сервером по stdio или HTTP, а сервер — с базой по SQL.

Схема: как агент работает с базой данных через MCP
Схема автора. Пользователь описывает задачу словами, агент превращает её в SQL и вызывает инструменты MCP-сервера; сервер выполняет запрос к базе. Read-only режим, парсер SQL, лимит строк и таймаут — стандартная защита на стороне сервера.

Какие бывают MCP-серверы для баз данных

DBHub (github.com/bytebase/dbhub, ~3,3 тыс. звёзд, MIT) — минимальный MCP-сервер для PostgreSQL, MySQL, MariaDB, SQL Server и SQLite. По умолчанию у него два инструмента — execute_sql и search_objects (поиск по схемам, таблицам и колонкам) — и это около 1,4 тыс. токенов на инициализацию, то есть в 13–14 раз меньше, чем у громоздких конкурентов (сравнение с ними есть прямо в README). У сервера есть read-only режим, лимит строк и таймаут запроса. Это официальный пример подключения к PostgreSQL в доках Claude Code.

README DBHub — MCP-сервер для баз данных
Скриншот официального README: DBHub — «минимальный MCP-сервер, эффективный по токенам, с двумя инструментами по умолчанию». Источник: github.com/bytebase/dbhub.

PostgreSQL reference server (@modelcontextprotocol/server-postgres) — эталонный сервер из репозитория MCP, выполняет только read-only запросы внутри транзакции READ ONLY и отдаёт схему таблиц как ресурсы. Репозиторий reference-серверов переехал в архив (servers-archived), а за актуальными серверами теперь ходят в официальный реестр.

Postgres MCP Pro (github.com/crystaldba/postgres-mcp, ~3,2 тыс. звёзд) — сервер «потяжелее»: кроме запросов умеет строить EXPLAIN-планы, подбирать индексы и проверять здоровье базы. Ключевое — режимы доступа: unrestricted (полный доступ, для разработки) и restricted (только чтение + ограничение времени запроса). В restricted-режиме сервер дополнительно парсит SQL библиотекой pglast и отклоняет COMMIT и ROLLBACK — так агент не может обойти read-only транзакцию командой ROLLBACK; DROP TABLE users;.

Где искать остальные серверы — официальный реестр registry.modelcontextprotocol.io, по запросу вроде «postgres» или «database».

Официальный реестр MCP-серверов
Скриншот официального реестра Model Context Protocol: тысячи серверов, в том числе для баз данных. Источник: registry.modelcontextprotocol.io.

Подключение к агенту: два примера

Claude Code — добавить сервер одной командой (пример прямо из документации):

claude mcp add --transport stdio db -- npx -y @bytebase/dbhub \
  --dsn "postgresql://readonly:pass@prod.db.com:5432/analytics"

Обратите внимание на строку подключения: readonly — отдельный пользователь базы без прав на запись. Документация Claude Code прямо требует этого: «Use a read-only database user in the connection string so the queries Claude runs can’t modify data». После подключения проверяется статус командой /mcp, и можно задавать вопросы обычным языком.

Документация Claude Code: подключение PostgreSQL через MCP
Официальная документация Claude Code, раздел MCP: подключение DBHub к PostgreSQL с read-only пользователем и примеры запросов естественным языком. Источник: docs.claude.com/en/docs/claude-code/mcp.

OpenCode — серверы описываются в opencode.json (документация opencode.ai/docs/mcp-servers):

{
  "mcp": {
    "db": {
      "type": "local",
      "command": ["npx", "-y", "@bytebase/dbhub", "--dsn", "postgres://user:pass@localhost:5432/mydb"],
      "enabled": true
    }
  }
}

Для удалённых серверов есть "type": "remote" с URL и авторизацией через opencode mcp auth. Учтите: каждый подключённый MCP-сервер добавляет токены в контекст, поэтому держите включёнными только те, что нужны сейчас.

Примеры промптов: схема таблиц + задача

Правило, которое убирает большинство ошибок: дайте агенту схему в том же промпте. Тогда модель не угадывает имена таблиц и колонок, а опирается на факты.

Пример промпта для генерации SQL:

Схема таблицы orders:
- id BIGINT PRIMARY KEY
- user_id BIGINT NOT NULL
- amount NUMERIC(10,2) NOT NULL
- status TEXT ('paid', 'pending', 'cancelled')
- created_at TIMESTAMPTZ NOT NULL

Задача: посчитай средний чек за последние 30 дней
только по оплаченным заказам. Верни только SQL.

Модель вернёт:

SELECT AVG(amount)
FROM orders
WHERE status = 'paid'
  AND created_at >= now() - interval '30 days';

Когда агент подключён к базе через MCP, промпт ещё короче — схему он возьмёт сам. Примеры запросов из документации Claude Code: «What’s our total revenue this month?», «Show me the schema for the orders table», «Find customers who haven’t made a purchase in 90 days».

Для генерации SQL хорошие модели на момент публикации — Claude (Sonnet/Opus), Gemini, а среди локальных — Qwen3-Coder и семейство Mistral для text2SQL. Про запуск локальных моделей для кодинга — в нашей статье про Qwen3-Coder через Ollama.

Кейс 1: бот-аналитик в российской компании на локальных моделях

Команда ecom.tech (российская компания, 1–5 тыс. сотрудников) описала на Хабре свой продукт «бот-аналитик»: сотрудник задаёт вопрос на естественном языке — «Сколько сырков заказали в Питере?» — нейросеть превращает его в SQL, выполняет в изолированной базе с синтетическими данными и возвращает понятный ответ.

Главное ограничение — данные компании не должны уходить наружу, поэтому большая внешняя модель отпала: «Ни одна служба безопасности не пропустит подобное решение для работы на настоящих данных». Решение — open-weight модели во внутреннем контуре: одна для понимания текста и ответа (семейство Gemma), вторая для text2SQL (семейство Mistral). Кандидатов проверяли на бенчмарках SPIDER, BIRD и PAUQ, а затем на собственной выборке из ~50 реальных вопросов. Тюнинг промптов (перевод системного промпта на английский, уточнение DDL) поднял качество до эталонного, а замена инференс-фреймворка на vLLM сократила генерацию SQL с двух минут до трёх секунд.

Вывод из кейса для всех: генерировать SQL локально — рабочий сценарий, а не экзотика, и данные остаются в компании.

Кейс 2: агент, который нашёл data-loss баг в базе

Саймон Уиллисон, известный автор о данных и инструментах, описал на simonwillison.net (5 июля 2026) подготовку релиза своей библиотеки sqlite-utils — утилиты для работы с SQLite. За 37 промптов и 34 коммита агент (Claude) внёс +1321/−190 строк в 30 файлов и — главное — нашёл перед релизом критический баг:

delete_where() never commits and poisons the connection (data loss). Table.delete_where() runs its DELETE via a bare self.db.execute() with no atomic() wrapper. The connection is left in_transaction=True, so every subsequent atomic() call takes the savepoint branch and never commits either.

Перевод: delete_where() не завершал транзакцию, соединение оставалось в состоянии in_transaction, и все последующие записи молча откатывались при закрытии базы. Пользователь видел удалённые строки, а на диске их не было. Без ревью агентом баг уехал бы в релиз.

Стоимость работы — по оценке через инструмент AgentsView — $149,25 (основная сессия $141,02). Второй раунд ревью провела уже другая модель (GPT-5.5), и она нашла ещё две проблемы уровня P1. Уиллисон резюмирует: «я начал по привычке просить лучшую модель Anthropic ревьюить работу OpenAI и наоборот — это стабильно приносит интересные результаты».

Кейс показателен для темы ИИ и баз данных: агент не только генерировал код для работы с БД, но и проверял его на соответствие документации, находил потерю данных — и это спасло релиз.

Безопасность: главное правило — не давать агенту права на прод

База данных — не файлы проекта: ошибка здесь означает потерю или утечку чужих данных. Правила на момент публикации:

  • Read-only пользователь. В строке подключения — отдельный пользователь без прав на запись (readonly). Это первая и главная защита, её рекомендует сама документация Claude Code.
  • Режим restricted у сервера. Postgres MCP Pro в restricted-режиме выполняет только чтение и ограничивает время запроса; reference-сервер PostgreSQL изначально работает внутри транзакции READ ONLY.
  • Парсер SQL. Сервер отклоняет конструкции, которые ломают read-only: COMMIT, ROLLBACK, DDL. Агент может попытаться обойти транзакцию запросом ROLLBACK; DROP TABLE users; — парсер pglast это режет.
  • Копия вместо прода. Для экспериментов используйте dev-копию базы или синтетические данные — так сделали в ecom.tech.
  • Лимиты. Ограничение числа строк в ответе и таймаут запроса защищают базу от тяжёлых SELECT без LIMIT, которые агент может написать по незнанию.
  • Подтверждение вызовов. В интерфейсах агентов каждый вызов инструмента должен быть виден и подтверждаться человеком. Не запускайте агента в автоматическом режиме с полным доступом к базе без присмотра.

Типовые ошибки: галлюцинации имён колонок

Самая частая ошибка ИИ при работе с БД — выдуманные имена таблиц и колонок. Модель видела в обучении похожие схемы и «вспоминает» колонку, которой нет. База отвечает ошибкой ERROR 42703: column "total_revenue" does not exist — если запрос вообще запустился.

Схема: галлюцинация имён колонок и как от неё защититься
Схема автора. Без схемы агент берёт имя колонки «из головы» — запрос падает с 42703. Со схемой в промпте (или через ресурс MCP) агент использует реальные имена, а SQL сначала прогоняется на read-only копии.

Как защититься:

  • Схема в промпте обязательна. DDL или список таблиц с колонками — даже для простого запроса.
  • Включите инструмент поиска по схеме. У DBHub это search_objects, у reference-сервера — ресурсы со схемой таблиц. Агент смотрит фактические имена перед тем, как писать запрос.
  • Прогоняйте на тестовой копии. Ошибка 42703 — не страшно, если запрос упал в изолированной базе. На проде такая ошибка ничего не сломает, а вот DELETE без WHERE — может.
  • Проверяйте результат глазами. Цифра правдоподобна ≠ цифра верна. Агент может «согласиться» с неверным результатом — критерий проверки должен задать человек.

Про другие грабли агентской работы (потеря контекста, «правдоподобный» код) — в статье про агентный кодинг.

Российские реалии

Локальные базы данных — без VPN и без оплаты. PostgreSQL в Docker или SQLite работают локально, и для них не нужны ни VPN, ни зарубежные карты. Если хочется полностью автономную связку, локальную модель (например, Qwen3-Coder через Ollama) подключают к агенту вместо облачной — такой сценарий разобран в нашей статье. Опыт генерации SQL на локальных моделях в российском контуре есть у ecom.tech (Хабр, февраль 2026).

MCP — открытый протокол. Реестры и документация из России открываются без ограничений; сам факт работы из РФ для MCP-серверов не важен — важно, где находится ваша база.

Supabase. Облачный PostgreSQL (open source BaaS) из России доступен без VPN, судя по свежим кейсам — например, автор с Хабра собрал на Supabase + Cloudflare Workers новостной агрегатор и подробно описал, что пошло не так (Хабр, июнь 2026). Бесплатный тариф (500 МБ базы, 2 проекта, 50 тыс. активных пользователей, supabase.com/pricing) регистрации с картой не требует. Платная подписка Pro от $25/мес — оплата зарубежной картой (российские Visa/Mastercard не проходят; Mir и UnionPay Supabase не принимает; вариант — карта зарубежного банка или посредник). Публичного пошагового гайда «как оплатить Supabase из РФ» в рунете на момент публикации не нашлось — проверяйте свежие кейсы на Хабре перед оплатой.

Neon. Serverless PostgreSQL с ветками и scale-to-zero. Из России доступен; бесплатный тариф — 0,5 ГБ хранилища и 100 CU-часов в месяц на проект, карта не нужна (neon.tech/pricing). Платный Launch — pay-as-you-go: $0,106 за CU-час и $0,35 за ГБ-месяц, тоже зарубежная карта. Русскоязычный опыт работы с Neon есть: на Хабре разобраны четыре production-инцидента с advisory locks на Neon (май 2026). Русскоязычных обзоров «Neon из России» в духе «работает без VPN» мало — общий вывод по доступности сделан по прямым проверкам сайта и свежим кейсам.

Если коротко: для старта из РФ самый беспроблемный путь — локальный Postgres (или SQLite) + агент с MCP-сервером; облачные Supabase/Neon годятся для пет-проектов на бесплатных тарифах, а платная часть упирается в зарубежную карту.

Советы

  • Начинайте с генерации без доступа к базе. Схема в промпте + SQL в ответе — нулевой риск, и этого достаточно для 80% задач.
  • Подключайте MCP-сервер, когда нужно выполнять запросы. Для отладки и аналитики агент с read-only доступом экономит часы.
  • Один сервер — один круг задач. Не вешайте на агента одновременно прод-базу и файлы проекта с секретами.
  • Фиксируйте критерий «правильно». Для SQL это: ожидаемая цифра, набор тестовых данных, выполнение на копии базы.
  • Локальные модели — рабочий вариант. Если данные нельзя отдавать наружу, text2SQL на локальной модели реально работает (кейс ecom.tech).

Честные ограничения

  • Галлюцинации не исчезают со схемой. Схема убирает ошибки имён, но не гарантирует бизнес-корректность: агент может сгенерировать валидный SQL с неверной логикой. Проверка — за человеком.
  • Агент не знает ваши данные. Он видит схему, а не смысл строк. Запрос к продакшену с плохим WHERE может вернуть неверные цифры, которые легко принять за верные.
  • Стоимость. Автономные агентские сессии (кейс Уиллисона) легко съедают десятки долларов на ревью релиза; для разовых SQL-запросов дешевле просто сгенерировать запрос в чате.
  • SQLite/Postgres — не вся картина. Для NoSQL, огромных кластеров и специфических диалектов возможности агентов уже, а проверить запрос на копии сложнее.
  • Версии движутся быстро. Команды и серверы актуальны на август 2026 года; перед внедрением сверяйтесь с документацией агента и реестром MCP.

Вывод

ИИ для баз данных в 2026 году — это не «вставьте задачу и получите идеальный запрос», а рабочий инструмент с понятными правилами: дайте схеме, подключите агента к базе через MCP-сервер с read-only доступом, прогоняйте на копии и проверяйте результат человеком. Генерация SQL экономит время уже сейчас, агенты с доступом к базе закрывают аналитику и отладку, а локальные модели решают вопрос приватности данных. Начните с малого: один MCP-сервер, одна база, read-only пользователь — и смотрите, где агенту можно доверять, а где нужен контроль.

Дальше по теме: что такое MCP, лучшие MCP-серверы, как установить Claude Code, как установить OpenCode, локальные нейросети для кодинга: Qwen3-Coder через Ollama.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка / 5. Количество оценок:

Оценок пока нет. Поставьте оценку первым.

Добавить комментарий

Adblock
detector