index_object:alter()
-
object
index_object
-
index_object:
alter
({options}) Изменение индекса. В определенных обстоятельствах можно изменять некоторые характеристики индекса, например тип, параметры последовательности и определение его уникальности. Тем не менее, это обычно приводит к перестроению спейса за исключением простого случая, когда значение флага
is_nullable
меняется сfalse
наtrue
.Параметры: - index_object (index_object) – ссылка на объект.
- options (table) – список параметров, аналогичный списку параметров для
create_index
, см. таблицу под названием Параметры для space_object:create_index().
возвращает: nil
Возможные ошибки:
- индекс не существует,
- индекс по первичному ключу не может быть неуникальным, то есть нельзя задать
{unique = false}
.
Примечание про движок базы данных: vinyl не поддерживает
alter()
для первичного индекса, если спейс содержит данные.Пример 1:
Можно добавлять и удалять поля, которые составляют первичный индекс:
tarantool> s = box.schema.create_space('test') --- ... tarantool> i = s:create_index('i', {parts = {{field = 1, type = 'unsigned'}}}) --- ... tarantool> s:insert({1, 2}) --- - [1, 2] ... tarantool> i:select() --- - - [1, 2] ... tarantool> i:alter({parts = {{field = 1, type = 'unsigned'}, {field = 2, type = 'unsigned'}}}) --- ... tarantool> s:insert({1, 't'}) --- - error: 'Tuple field 2 type does not match one required by operation: expected unsigned' ...
Пример 2:
Можно изменять опции индекса для спейсов как в memtx’е, так и в vinyl’е:
tarantool> box.space.space55.index.primary:alter({type = 'HASH'}) --- ... tarantool> box.space.vinyl_space.index.i:alter({page_size=4096}) --- ...
-