Для AI-агентов: markdown этой страницы — /docs-content/infra/database/rows-update.md индекс документации — /llms.txt
Изменить строку
PATCH /v1/infra/servers/:id/db/tables/:table/rows/:key
Изменяет значения колонок одной строки в таблице SQLite-базы приложения в Галактике. Строка адресуется непрозрачным ключом из ответа на чтение строк, в теле передаются только изменяемые колонки.
Перед записью платформа сохраняет защитную копию базы — см. Защитные копии перед записью. Условия доступа — Когда база доступна.
Параметры
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
Параметрid (path) |
Типstring | Обяз.да | ОписаниеID приложения с kind равным GALAXY_APP. Список: GET /v1/infra/servers |
Параметрtable (path) |
Типstring | Обяз.да | ОписаниеТочное имя таблицы из data.tables[].name ответа GET /db/schema, до 256 байт UTF-8. У таблицы должно быть editability.editable: true: представления, виртуальные таблицы и таблицы без первичного ключа и без доступного rowid не редактируются |
Параметрkey (path) |
Типstring | Обяз.да | ОписаниеКлюч строки — элемент data.rowKeys[i] ответа GET /db/tables/:table/rows, выровненный со строкой data.rows[i]. Строка до 1024 символов base64url, подставляется в путь как есть. null в rowKeys означает, что строку адресовать нельзя: значение ключевой колонки null, BLOB или слишком длинное. Ключ строится по первичному ключу, а без него — по rowid, если колонка с таким именем не перекрывает его. Не изменяйте и не записывайте ключ в журналы: внутри — значения ключевых колонок строки |
Поля запроса (body)
Тело — строгий JSON: поля, которых нет в таблице ниже, отклоняются с 400 VALIDATION_ERROR. Размер тела — до 64 КиБ.
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
Полеfile |
Типstring | Обяз.нет | ОписаниеОтносительный путь к файлу базы внутри тома приложения, до 1024 байт UTF-8. По умолчанию — значение VIBE_DB_PATH контейнера приложения, без него app.db. Абсолютные пути, переходы вверх по каталогам и символические ссылки запрещены. Должен совпадать с файлом, из которого прочитан key |
Полеvalues |
Типobject | Обяз.да | ОписаниеНовые значения: ключ — имя колонки из схемы, до 256 байт UTF-8, значение — ячейка. От 1 до 256 колонок, остальные колонки строки не меняются. Нельзя передавать колонки ключа строки из editability.keyColumns, вычисляемые и скрытые колонки. Колонку, в которой сейчас лежит BLOB или значение длиннее 64 КиБ, перезаписать нельзя, другие колонки этой строки — можно |
Полеvalues.<колонка> |
Типnull | number | string | object | Обяз.— | Описаниеnull, конечное число, строка до 64 КиБ UTF-8 или объект { "type": "integer", "value": "9223372036854775807" } для точного 64-битного целого. Целое число без объекта — только в диапазоне ±9007199254740991. Логические значения, массивы, BLOB и другие объекты не принимаются |
Примеры
curl — личный ключ
curl -X PATCH "https://vibecode.bitrix24.tech/v1/infra/servers/7c2b1f08-3a4d-4e91-9b6c-2f5e8a1d0c33/db/tables/customers/rows/eyJ2IjoxLCJhcHBJZCI6IjdjMmIxZjA4LTNhNGQtNGU5MS05YjZjLTJmNWU4YTFkMGMzMyIsImZpbGUiOiJhcHAuZGIiLCJ0YWJsZSI6ImN1c3RvbWVycyIsImtpbmQiOiJwayIsImNvbHVtbnMiOlsiaWQiXSwidmFsdWVzIjpbeyJ0eXBlIjoiaW50ZWdlciIsInZhbHVlIjoiNCJ9XX0" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"values": {
"email": "d2@example.com"
}
}'
curl — OAuth-приложение
curl -X PATCH "https://vibecode.bitrix24.tech/v1/infra/servers/7c2b1f08-3a4d-4e91-9b6c-2f5e8a1d0c33/db/tables/customers/rows/eyJ2IjoxLCJhcHBJZCI6IjdjMmIxZjA4LTNhNGQtNGU5MS05YjZjLTJmNWU4YTFkMGMzMyIsImZpbGUiOiJhcHAuZGIiLCJ0YWJsZSI6ImN1c3RvbWVycyIsImtpbmQiOiJwayIsImNvbHVtbnMiOlsiaWQiXSwidmFsdWVzIjpbeyJ0eXBlIjoiaW50ZWdlciIsInZhbHVlIjoiNCJ9XX0" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"values": {
"email": "d2@example.com"
}
}'
JavaScript — личный ключ
// Ключ берётся из data.rowKeys ответа GET /db/tables/customers/rows
const rowKey = 'eyJ2IjoxLCJhcHBJZCI6IjdjMmIxZjA4LTNhNGQtNGU5MS05YjZjLTJmNWU4YTFkMGMzMyIsImZpbGUiOiJhcHAuZGIiLCJ0YWJsZSI6ImN1c3RvbWVycyIsImtpbmQiOiJwayIsImNvbHVtbnMiOlsiaWQiXSwidmFsdWVzIjpbeyJ0eXBlIjoiaW50ZWdlciIsInZhbHVlIjoiNCJ9XX0'
const res = await fetch(`https://vibecode.bitrix24.tech/v1/infra/servers/7c2b1f08-3a4d-4e91-9b6c-2f5e8a1d0c33/db/tables/customers/rows/${rowKey}`, {
method: 'PATCH',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
values: {
email: 'd2@example.com',
},
}),
})
const { success, data, error } = await res.json()
if (res.status === 409 && error.code === 'APP_DB_BACKUP_NOT_READY') {
// Защитная копия готовится — повторите запрос через Retry-After секунд
console.log('Повтор через', res.headers.get('Retry-After'), 'с')
} else {
console.log('Изменено строк:', data.rowCount)
}
JavaScript — OAuth-приложение
// Ключ берётся из data.rowKeys ответа GET /db/tables/customers/rows
const rowKey = 'eyJ2IjoxLCJhcHBJZCI6IjdjMmIxZjA4LTNhNGQtNGU5MS05YjZjLTJmNWU4YTFkMGMzMyIsImZpbGUiOiJhcHAuZGIiLCJ0YWJsZSI6ImN1c3RvbWVycyIsImtpbmQiOiJwayIsImNvbHVtbnMiOlsiaWQiXSwidmFsdWVzIjpbeyJ0eXBlIjoiaW50ZWdlciIsInZhbHVlIjoiNCJ9XX0'
const res = await fetch(`https://vibecode.bitrix24.tech/v1/infra/servers/7c2b1f08-3a4d-4e91-9b6c-2f5e8a1d0c33/db/tables/customers/rows/${rowKey}`, {
method: 'PATCH',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
values: {
email: 'd2@example.com',
},
}),
})
const { success, data, error } = await res.json()
if (res.status === 409 && error.code === 'APP_DB_BACKUP_NOT_READY') {
// Защитная копия готовится — повторите запрос через Retry-After секунд
console.log('Повтор через', res.headers.get('Retry-After'), 'с')
} else {
console.log('Изменено строк:', data.rowCount)
}
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
Полеsuccess |
Типboolean | ОписаниеВсегда true при успехе |
Полеdata.file |
Типstring | ОписаниеФайл базы, в котором изменена строка |
Полеdata.table |
Типstring | ОписаниеИмя таблицы |
Полеdata.rowCount |
Типnumber | ОписаниеЧисло изменённых строк, всегда 1 |
Полеdata.durationMs |
Типnumber | ОписаниеВремя выполнения записи в базе, в миллисекундах |
Полеdata.backupId |
Типstring | ОписаниеID защитной копии, сделанной перед первой правкой строк за последние 10 минут. Правки строк в этом окне получают одну и ту же копию, и восстановление из неё отменяет их все. Список копий — GET /db/backups, восстановление — POST /db/restore |
Пример ответа
{
"success": true,
"data": {
"file": "app.db",
"rowCount": 1,
"durationMs": 1.336,
"table": "customers",
"backupId": "cb2fcdfd-bace-4932-a276-31d737337f3d"
}
}
Пример ответа при ошибке
409 — в values передана колонка первичного ключа id:
{
"success": false,
"error": {
"code": "APP_DB_ROW_NOT_EDITABLE",
"message": "Database row cannot be edited"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| HTTP404 | КодAPP_DB_ROW_NOT_FOUND |
ОписаниеПо ключу не найдено ни одной строки: строку удалили или изменили значение её ключа |
| HTTP409 | КодAPP_DB_ROW_NOT_EDITABLE |
ОписаниеСтроку нельзя изменить: в values колонка ключа строки, вычисляемая колонка, колонка, которой нет в таблице, или колонка с BLOB либо значением длиннее 64 КиБ. Также — ключ не подходит к этому приложению, файлу или таблице, ключ находит больше одной строки, таблица не редактируется |
| HTTP409 | КодAPP_DB_BACKUP_NOT_READY |
ОписаниеЗащитная копия готовится, строка не изменена. В error.details — backupId, retryable: true и retryAfterSeconds, в заголовке Retry-After — те же секунды, от 1 до 60. Повторите тот же запрос после паузы |
| HTTP409 | КодAPP_DB_BUSY |
ОписаниеИдёт деплой, перенос или восстановление приложения либо другая запись в базу, или пробуждение приложения либо хоста запрещено. Есть заголовок Retry-After |
| HTTP409 | КодAPP_DB_WAL_CLOSED |
ОписаниеЗащитная копия не создана: работающее приложение закрыло соединение с базой в режиме WAL. Строка не изменена, заголовка Retry-After нет. Настройте приложение так, чтобы соединение оставалось открытым |
| HTTP400 | КодVALIDATION_ERROR |
ОписаниеЗапрос не прошёл проверку: пустой или отсутствующий values, лишнее поле, недопустимый тип значения или file, имя таблицы длиннее 256 байт, ключ длиннее 1024 символов или с символами вне base64url |
| HTTP400 | КодAPP_DB_INVALID_FILE |
ОписаниеПуть file не указывает на допустимый файл базы внутри /data |
| HTTP400 | КодAPP_DB_UNSUPPORTED_PLACEMENT |
ОписаниеПриложение размещено не в Галактике |
| HTTP404 | КодAPP_DB_TABLE_NOT_FOUND |
ОписаниеТаблицы :table нет в базе |
| HTTP404 | КодAPP_DB_NOT_FOUND |
ОписаниеТома или файла базы нет: приложение ещё не создало базу |
| HTTP404 | КодNOT_FOUND |
ОписаниеПриложение не найдено, удалено или недоступно этому ключу |
| HTTP413 | КодPAYLOAD_TOO_LARGE |
ОписаниеТело больше 64 КиБ или полный вход служебного процесса больше 96 КиБ |
| HTTP422 | КодAPP_DB_SQL_ERROR |
ОписаниеИзменение отклонила база, транзакция откатена. Причина — в error.details.reason, например constraint_failed или type_mismatch |
| HTTP422 | КодAPP_DB_QUERY_TIMEOUT |
ОписаниеЗапись не уложилась в 30 секунд, транзакция откатена |
| HTTP422 | КодAPP_DB_CORRUPT |
ОписаниеФайл базы повреждён |
| HTTP422 | КодAPP_DB_BACKUP_TIMEOUT |
ОписаниеЗащитная копия не уложилась в отведённое время, строка не изменена |
| HTTP422 | КодAPP_DB_BACKUP_INVALID |
ОписаниеЗащитная копия не прошла проверку, строка не изменена |
| HTTP503 | КодAPP_DB_PRE_CHANGE_FAILED |
ОписаниеЗащитная копия не создана, строка не изменена. Ошибка сообщается один раз — следующий вызов начинает новую копию |
| HTTP503 | КодAPP_DB_WRITE_OUTCOME_UNKNOWN |
ОписаниеОтвет от базы потерян, строка могла быть изменена. retryable: false — автоматически не повторяйте, сначала проверьте строку |
| HTTP503 | КодAPP_DB_TOOL_UNAVAILABLE |
ОписаниеХост не подготовлен или временно недоступен. Есть заголовок Retry-After |
| HTTP402 | КодBILLING_FROZEN |
ОписаниеПлатёжный аккаунт портала заморожен |
| HTTP402 | КодBILLING_INSUFFICIENT |
ОписаниеБаланс портала не позволяет создать защитную копию |
| HTTP403 | КодAPP_DB_READONLY_KEY |
ОписаниеКлюч с доступом только на чтение не может изменять базу |
| HTTP403 | КодAPP_DB_DISABLED |
ОписаниеРабота с базой не включена для портала |
| HTTP403 | КодINFRA_SCOPE_REQUIRED |
ОписаниеУ ключа нет скоупа vibe:infra |
| HTTP429 | КодRATE_LIMITED |
ОписаниеПревышен лимит запросов на запись для портала — Лимиты. Пауза — в заголовке Retry-After |
| HTTP401 | КодMISSING_API_KEY |
ОписаниеНе передан X-Api-Key |
Полный список общих ошибок API — Ошибки.
Известные особенности
Проверки версии строки нет. Изменение не сверяет, менялась ли строка после чтения: при двух одновременных правках одной строки сохраняются значения последней.
Ключ устаревает вместе со схемой. Ключ хранит набор ключевых колонок таблицы на момент чтения. Если первичный ключ таблицы изменился, прежние ключи отвечают 409 APP_DB_ROW_NOT_EDITABLE — прочитайте строки заново.