希望创建如下所示的表:
CREATE TABLE newtable (
id UUID GENERATED ALWAYS AS gen_random_uuid() STORED,
org uuid NOT NULL,
name text,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
UNIQUE(name, org)
)
但我得到一个错误:
Query 1 ERROR: ERROR: syntax error at or near "gen_random_uuid"
LINE 2: id UUID GENERATED ALWAYS AS gen_random_uuid() STORED
Postgres文档here(generated columns)和here (table creation)指出这应该是可能的:
GENERATED ALWAYS AS(generation_expr)STORED此子句将列创建为生成列。无法写入此列,读取时将返回指定表达式的结果。
关键字STORED是必需得,它表示将在写入时计算列并将其存储在磁盘上.
生成表达式可以引用表中的其他列,但不能引用其他生成的列。使用的任何函数和运算符都必须是不可变的。不允许引用其他表。
我遗漏了什么?gen_random_uuid不是一个生成表达式吗?它似乎符合所有条件。
1条答案
按热度按时间eh57zj3b1#
***generation_expr***
前后的括号不见了,但这只是语法上的问题,不能用生成的列来表示它。进一步阅读链接到的the documentation,你会发现:现在
gen_random_uuid()
肯定不是IMMUTABLE
函数。您有两个选项:
DEFAULT
子句DEFAULT
,请使用BEFORE INSERT
触发器