我正在向表中添加一些列,并希望生成一个将它们组合在一起的列,以便用于唯一索引.当我try 添加该列时,出现错误ERROR: generation expression is not immutable
.
我遵循从this question开始的解决方案,并专门使用CASE
和||
进行字符串连接,它们应该是immutable
.
ALTER TABLE tag
ADD COLUMN prefix VARCHAR(4) NOT NULL,
ADD COLUMN middle BIGINT NOT NULL,
ADD COLUMN postfix VARCHAR(4), -- nullable
-- VARCHAR size is 4 prefix + 19 middle + 4 postfix + 2 delimiter
ADD COLUMN tag_id VARCHAR(29) NOT NULL GENERATED ALWAYS AS
(CASE WHEN postfix IS NULL THEN prefix || '-' || middle
ELSE prefix || '-' || middle || '-' || postfix
END
) STORED;
CREATE UNIQUE INDEX unq_tag_tag_id ON tag(tag_id);
在postgres mailing list强中,其中一位贡献者澄清说:
整数到文本强制,[...]并不一定 不可变的
然而,他并不共享一个不变的从整数到文本的函数.有没有人知道有没有?