space_object:upsert()
-
object
space_object
-
space_object:
upsert
(tuple, {{operator, field_no, value}, ...}) Обновить или вставить кортеж.
Если существует кортеж, который совпадает с полями ключа
tuple
, запрос приведет к тому же результату, что и space_object:update(), и используется параметр{{operator, field_no, value}, ...}
. Если нет кортежа, который совпадает с полями ключаtuple
, запрос приведет к тому же результату, что и space_object:insert(), и используется параметр{tuple}
. Однако, в отличие отinsert
илиupdate
,upsert
не считывает кортеж и не проверяет на ошибки перед возвратом – это конструктивная особенность, которая увеличивает быстродействие, но требует большей осторожности со стороны пользователя.Параметры: - space_object (space_object) – ссылка на объект
- tuple (table/tuple) – вставляемый по умолчанию кортеж, если не найдет аналог
- operator (string) – тип операции, представленный строкой
- field_no (number) – к какому полю применяется операция. Номер поля может быть отрицательным, что означает, что позиция рассчитывается с конца кортежа. (#кортеж + отрицательный номер поля + 1)
- value (lua_value) – какое значение применяется
возвращает: null
Возможные ошибки:
- Нельзя изменять поле первичного ключа.
- Нельзя проводить операцию upsert в спейсе, в котором есть уникальный вторичный индекс.
Факторы сложности: Размер индекса, тип индекса, количество индексов, к которым получен доступ, настройки журнала упреждающей записи (WAL).
Пример:
box.space.tester:upsert({12,'c'}, {{'=', 3, 'a'}, {'=', 4, 'b'}})
Для получения дополнительной информации о сценариях использования и типичных ошибках, см. Пример: использование операций с данными далее в разделе.
-