我有一张桌子
CREATE TABLE IF NOT EXISTS metadata (
user_id int not null,
entry VARCHAR(4096) not null
);
我正在尝试添加一个主键,将其在entry
列上的大小限制为 16 个字节。2730
由于存储开销,我不想在输入字段上索引完整(B-TREE 限制)字符。
ALTER TABLE metadata ADD PRIMARY KEY (user_id, (entry::varchar(16)));
不幸的是不允许这样的语法
SQL Error [42601]: ERROR: syntax error at or near "("
也不是:
ALTER TABLE metadata ADD PRIMARY KEY (user_id, entry(16)) -- That would probably work on MySQL
看来我可以创建一个普通的索引就好了
create index some_index on metadata(user_id, (entry::varchar(16)));
有没有办法限制主索引中的列大小?
不允许您在主键定义中使用表达式。这意味着您需要为该数据添加一个附加列,这可以通过使用生成的列来完成。该列可以在您的主键中使用: