如何在 Tarantool 中更改 sql table 的格式

How to change format of sql table in Tarantool

我想将可为空的列添加到 sql table,但更改 table 格式会导致错误:

box.execute([[
    CREATE TABLE test(
        "id" INTEGER PRIMARY KEY AUTOINCREMENT,
        "name" TEXT NOT NULL
    )
]])

f = box.space.TEST:format()

table.insert(f, {type='string', name='description', is_nullable=true})

box.space.TEST:format(f)

error: 'Can''t modify space ''TEST'': exact_field_count must be either 0 or >= formatted
    field count'

那么有什么方法可以改变 sql table 的格式吗?

目前(Tarantool 2.4 beta)元数据中有 an open issue about that. The source of the problem is that tables created via SQL DDL contain non-null field_count 属性,禁止将较大的元组保存到 space。

但是,如果您在创建 space 时指定了 field_count 或使用 SQL DDL 创建它,并决定添加 tuple/column,这里有一个解决方法将 field_count 值设置为 0:

tarantool> box.space._space:update(box.space.YOUR_SPACE.id, {{'=',5,0}})

之后,您将能够更改 space 格式并插入更大的元组。将 YOUR_SPACE 替换为您 space 的实际名称。对于通过 SQL DDL 创建的 space,此名称将是大写字母的 SQL table 名称。

一个更新:在最新稳定的 Tarantool 版本 (2.7.2) 中,现在可以使用 ALTER 添加列,例如 box.execute([[ALTER TABLE test ADD COLUMN third INTEGER;]])