Для 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 — личный ключ

Terminal
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-приложение

Terminal
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 — личный ключ

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-приложение

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_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

Пример ответа

JSON
{
  "success": true,
  "data": {
    "file": "app.db",
    "rowCount": 1,
    "durationMs": 1.336,
    "table": "customers",
    "backupId": "cb2fcdfd-bace-4932-a276-31d737337f3d"
  }
}

Пример ответа при ошибке

409 — в values передана колонка первичного ключа id:

JSON
{
  "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 — прочитайте строки заново.

Смотрите также