PostgreSQL中如何为user表hat_color列设置三选一的随机默认值?
实现PostgreSQL列随机默认值(从指定颜色列表选取)
可行,你的思路没问题,但原写法有两处问题:一是PostgreSQL里数组构造需用ARRAY[]语法,不能直接用方括号声明;二是你用到的h和l未定义,且PostgreSQL数组采用1-based下标,得调整随机数范围。
正确实现分两种场景:
1. 创建表时定义列
CREATE TABLE "user" ( id SERIAL PRIMARY KEY, hat_color TEXT DEFAULT (ARRAY['red', 'blue', 'green'])[floor(random() * 3 + 1)::int] );
2. 给已有表添加列
ALTER TABLE "user" ADD COLUMN hat_color TEXT DEFAULT (ARRAY['red', 'blue', 'green'])[floor(random() * 3 + 1)::int];
原理说明
ARRAY['red', 'blue', 'green']构造包含目标颜色的数组random() * 3生成0到3之间的随机浮点数,floor()取整后得到0、1、2,加1后转为1、2、3,刚好匹配数组的1-based下标- 每次插入新行时,数据库会重新计算该表达式,因此每行的
hat_color默认值会随机从三个颜色中选取
测试验证:多次执行INSERT INTO "user" DEFAULT VALUES;,查询表就能看到hat_color列随机出现red、blue、green三种值。
内容的提问来源于stack exchange,提问作者Quinten C
相关产品推荐
相关产品推荐

