> ## Documentation Index
> Fetch the complete documentation index at: https://cs-lua.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# db — Открытие

> SQLite: база — файл в каталоге плагина

# Открытие

<h2 id="open">
  db.open
</h2>

Открывает базу в каталоге плагина.

```lua theme={null}
db.open(name)
```

### Аргументы

| # | имя    | тип    |                                                         |
| - | ------ | ------ | ------------------------------------------------------- |
| 1 | `name` | string | имя без пути и расширения; `":memory:"` — база в памяти |

### Возвращает

| тип         |                                  |
| ----------- | -------------------------------- |
| `db \| nil` | объект базы                      |
| `string`    | причина, если открыть не удалось |

### Пример

```lua theme={null}
local handle, why = db.open("stats")
if not handle then
	print("stats: " .. why)
	return
end
```

Файл ложится в [`plugin.data_dir()`](../plugin/index.md#data_dir) как `<name>.db`.
Имя — это имя, а не путь: буквы, цифры, `_` и `-`, до 64 символов; слэши и `..`
отвергаются. Повторный вызов в том же плагине возвращает тот же хендл.

При открытии выставляется:

| pragma         | значение |                                       |
| -------------- | -------- | ------------------------------------- |
| `journal_mode` | `WAL`    | писатель не блокирует читателей       |
| `synchronous`  | `NORMAL` | коммит не ждёт полного сброса на диск |
| `foreign_keys` | `ON`     | внешние ключи работают                |

Загружаемые расширения (`load_extension`) отключены на этапе сборки.

<Note>
  Плата за `synchronous = NORMAL` — падение машины может стоить
  последних транзакций. Для игровой статистики приемлемо, для учёта
  денег вне игры — нет.
</Note>
