Раздел SQL предоставляет выделенную базу данных SQLite для каждого проекта. Вы можете создавать таблицы, индексы и представления, редактировать данные вручную, писать любые запросы и получать доступ к базе данных непосредственно из вашего рабочего процесса. Это полнофункциональный SQLite с неограниченным синтаксисом: все, что поддерживается SQLite, работает и здесь.
База данных SQL хранится отдельно от таблиц в разделе Таблицы. Изменения, внесенные в одном разделе, не влияют на другой.
Как открыть
Проект → Таблицы → нажмите SQL справа от Добавить таблицу.

Чтобы вернуться к списку таблиц, нажмите стрелку в заголовке страницы.
Раздел SQL доступен участникам команды с разрешением на редактирование таблиц. Пользователи с доступом только для просмотра могут видеть структуру базы данных, но не могут получить доступ к ее данным или запросам.
Структура базы данных
Дерево базы данных отображается справа. Оно содержит таблицы с их столбцами и индексами, за которыми следуют представления. Каждый столбец показывает свой тип данных, столбцы первичного ключа отмечены значком ключа, а индексы отображают атрибут UNIQUE и связанные с ними столбцы.

Все действия, связанные со структурой, доступны из меню узла: щелкните правой кнопкой мыши по узлу, нажмите значок ⋮, который появляется при наведении, или используйте кнопку + над деревом.
| Узел | Действия |
|---|---|
| База данных | создать таблицу, создать представление, обновить, скачать базу данных |
| Таблица | открыть, добавить столбец, добавить индекс, переименовать, DDL, обновить, удалить |
| Столбец | переименовать, удалить |
| Индекс | DDL, удалить |
| Представление | открыть, DDL, удалить |

Создать таблицу. Укажите имя таблицы и столбцы: имя, тип, значение по умолчанию, PK и NOT NULL. Вы можете выбрать тип данных из предложенных или ввести свой. Если вы отметите несколько столбцов как PK, они образуют составной первичный ключ.

DDL отображает оператор CREATE объекта в консоли. Это полезно для копирования его структуры или воссоздания в другом проекте.
Кнопки над деревом позволяют создавать объекты, обновлять базу данных, показывать или скрывать консоль, просматривать DDL выбранной таблицы, скачивать базу данных или очищать базу данных.

Данные таблицы
Нажмите на таблицу в дереве базы данных, чтобы открыть ее данные. Сетка работает во многом как лист в разделе Таблицы:
- Редактирование ячейки двойным щелчком. Нажмите Enter для сохранения или Esc для отмены. Значение записывается в базу данных немедленно.
- Строки. Нажмите +, чтобы добавить пустую строку, или −, чтобы удалить выбранные строки. Нажмите на номер строки в первом столбце, чтобы выбрать ее. Используйте Shift или Cmd/Ctrl для выбора нескольких строк.
-
NULL значения отображаются как
NULL. Очистка ячейки записывает пустую строку в базу данных. Чтобы записать значение NULL, используйте запрос. - Поля WHERE и ORDER BY над сеткой принимают условия SQL и выражения сортировки. Введите выражение и нажмите Enter. Поле ORDER BY имеет приоритет над сортировкой, примененной через меню столбца.
- Меню столбца (значок в заголовке столбца): сортировка по возрастанию или убыванию, или фильтр по подстроке.
- Данные загружаются по мере прокрутки, партиями по 100 строк. Счетчик справа показывает текущий диапазон и общее количество строк.
- Представления доступны только для чтения.
Консоль

Нажмите кнопку </> над деревом базы данных, чтобы открыть консоль, которая включает редактор запросов с подсветкой синтаксиса и результаты запросов.
- Выполните запрос с помощью кнопки или Ctrl+Enter (Cmd+Enter на Mac).
- Вы можете выполнять несколько запросов, разделенных
;. Результат отображает строки, возвращенные последним запросом, который произвел данные, а также общее количество затронутых строк. - Ошибки SQLite отображаются как есть. При выполнении нескольких запросов к сообщению об ошибке добавляется номер запроса:
[2] no such table: .... - Избранное. Нажмите Добавить в избранное, чтобы сохранить текущий запрос под именем. Сохраненные запросы появляются в виде чипов над редактором: нажмите на один, чтобы загрузить запрос, или нажмите крестик, чтобы удалить его. Избранное хранится в вашем браузере отдельно для каждого проекта.
- Текст вашего последнего запроса сохраняется между сессиями.
Скачивание и очистка базы данных
Скачать базу данных загружает всю базу данных как project_<id>_sql.sqlite3. Вы можете открыть ее в любом приложении, совместимом с SQLite, перенести в другой проект или использовать вне Mavibot.
Очистить базу данных удаляет все таблицы и данные из раздела SQL. Это действие нельзя отменить, и оно требует ввода подтверждающего слова. Таблицы в разделе Таблицы не затрагиваются.
Функции калькулятора
Две функции калькулятора позволяют получить доступ к базе данных SQL из вашего рабочего процесса. Обе доступны в предложениях редактора и распознаются ассистентом.
sql(query, params=null, strict=true)
Выполняет запрос.
| Запрос | Возвращаемое значение |
|---|---|
| Запрос с результатом (SELECT, RETURNING, PRAGMA) | JSON-список строк, где каждая строка представлена как объект: [{"id": 1, "name": "Anna"}, ...]
|
| Запрос без результата (INSERT, UPDATE, DELETE) | количество затронутых строк |
| CREATE, DROP и другие изменения схемы | 0 |
| Ошибка | строка ERROR: <сообщение об ошибке SQLite>
|
Пример:
rows = sql("SELECT name, phone FROM clients WHERE city = ?", [city])
n = sql("UPDATE clients SET status = :s WHERE id = :id", {"s": "vip", "id": client_id})
sql_value(query, params=null, strict=true)
Работает как sql, но возвращает одно значение: первый столбец первой строки результата.
Если строк нет, результата нет или значение равно NULL, возвращается пустая строка.
total = sql_value("SELECT count(*) FROM clients")
name = sql_value("SELECT name FROM clients WHERE id = ?", [client_id])
Параметры
params передает значения в запрос отдельно от текста запроса: используйте JSON-массив для плейсхолдеров ? или JSON-объект для плейсхолдеров :name. Внутри [...] и {...} переменные записываются как простые имена переменных:
[client_id], а не [#{client_id}].
Передавайте любые значения, полученные от клиента, через params, такие как его имя, номер телефона или текст сообщения. Значение, конкатенированное непосредственно в текст запроса, может изменить сам запрос.
Строгий режим
По умолчанию strict=true: функция принимает ровно один запрос и не допускает комментариев в тексте запроса. Это предотвращает возможность значения, полученного из сообщения клиента, добавить второй запрос или обрезать остальную часть исходного запроса.
Установите strict=false, чтобы снять это ограничение, например, при выполнении нескольких запросов, разделенных ;.
Лимиты
| Лимит | Значение |
|---|---|
| Время выполнения одного запроса или пакета запросов | 5 секунд |
| Возвращаемые строки | до 1,000; дополнительные строки не возвращаются |
| Длина текста запроса | 64 КБ |
| Размер базы данных | 200 МБ; после превышения доступны только чтение и удаление данных |
Единственные запрещенные команды — те, которые обращаются к ресурсам вне базы данных проекта: ATTACH с путем к файлу и VACUUM INTO.
Все остальное, включая стандартные VACUUM, PRAGMA и транзакции, поддерживается.