我想用以下值随机填充表中的一列: 可用、暂停、部分首付、已售/不可用、代币
我尝试使用以下命令,但它使用它获得的第一个值填充整个列。
update mytable
set sold_status = (select (array['Available', 'On Hold', 'Partial Downpayment', 'Sold/Unavailable', 'Token Recieved'])[floor(random() * 5 + 1)])
我知道如何使用编程语言实现这一点,但我更喜欢使用 PostgreSQL 查询来实现这一点。
答案 0 :(得分:0)
Postgres 认为它只运行一次 random()
对您有帮助 -- 忘记了 random()
是一个可变函数。
您可以使用 case
解决此问题:
update mytable
set sold_status = (case (random()*5)::int when 0 then 'Available' when 1 then 'On Hold' when 2 then 'Partial Downpayment' when 3 then 'Sold/Unavailable' when 4 then 'Token Recieved' end);
Here 是一个 db<>fiddle。
答案 1 :(得分:0)
虽然 PostgreSQL 跟踪简单表达式的波动性,但它不会跟踪不包含对外部查询的引用的子选择的波动性。您可以通过引入对外部查询的人工引用来解决此问题,但在您的情况下,您首先不需要子选择,因此只需摆脱它。
update mytable
set sold_status = (array[
'Available', 'On Hold', 'Partial Downpayment', 'Sold/Unavailable', 'Token Recieved'
]) [floor(random() * 5 + 1)];