Предупреждение о рисках!
Установка скиллов и плагинов OpenClaw осуществляется на ваш страх и риск. Все файлы были получены из открытых источников и предоставляются «как есть». Мы не гарантируем их корректную работу, безопасность или совместимость с вашей системой. Перед установкой настоятельно рекомендуется ознакомиться с содержимым кода и убедиться, что вы понимаете, какие изменения будут внесены в вашу систему.
Используйте SQLite правильно — с учетом особенностей конкурентного доступа, настроек PRAGMA и корректной работы с типами данных.
Конкурентность (главный подводный камень)
- Одновременно может быть только один писатель — параллельные записи либо выстраиваются в очередь, либо завершаются ошибкой. SQLite не подходит для сценариев с высокой нагрузкой на запись.
- Включайте режим WAL:
PRAGMA journal_mode=WAL— это позволяет читать данные во время записи и существенно повышает производительность. - Задавайте таймаут ожидания:
PRAGMA busy_timeout=5000— база будет ждать до 5 секунд перед ошибкойSQLITE_BUSY, вместо мгновенного отказа. - Режим WAL использует файлы
-walи-shm— не забывайте копировать их вместе с основной базой данных. - Используйте
BEGIN IMMEDIATE, чтобы заранее захватить блокировку записи — это предотвращает дедлоки в сценариях «сначала читаем, потом пишем».
Внешние ключи (по умолчанию отключены!)
- Необходимо явно включать:
PRAGMA foreign_keys=ON— и делать это для каждого соединения (настройка не сохраняется в самой базе). - Если не включить, ограничения внешних ключей будут тихо игнорироваться — целостность данных окажется нарушенной.
- Перед использованием проверяйте состояние:
PRAGMA foreign_keysвернет0или1. ON DELETE CASCADEработает только при включенных внешних ключах.
Типы данных и приведение
- SQLite использует динамическую типизацию — тип столбца задает лишь предпочтение, а не жесткое ограничение.
- Возможны неожиданные преобразования типов — особенно при сравнении строк и чисел.
- Для предсказуемого поведения явно приводите типы с помощью
CAST. - Храните даты либо как ISO-строки, либо как Unix-время — избегайте смешанных форматов.
Индексы и производительность
- Индексы критичны для производительности — без них даже простые запросы становятся медленными.
- Создавайте индексы под реальные запросы, а не «на всякий случай».
- Проверяйте план выполнения через
EXPLAIN QUERY PLAN. - Избегайте лишних индексов — они замедляют операции записи.
Транзакции
- Всегда оборачивайте несколько операций записи в транзакцию — это ускоряет выполнение в разы.
- По умолчанию каждая команда — отдельная транзакция, что сильно снижает производительность.
- Используйте
BEGIN/COMMITдля контроля. - При необходимости используйте
ROLLBACKдля отката изменений.
Практические рекомендации
- SQLite отлично подходит для локальных приложений, CLI-инструментов и небольших сервисов.
- Не используйте его как замену полноценной СУБД при высокой нагрузке или сложной многопользовательской записи.
- Следите за настройками PRAGMA — они напрямую влияют на поведение и надежность.
- Всегда тестируйте сценарии с реальной нагрузкой, а не только на «пустой» базе.
Файл из источника