使用 PostgreSQL 列表中的值随机填充表列

时间:2021-05-24 13:00:22

标签: sql database postgresql random auto-populate

我想用以下值随机填充表中的一列: 可用、暂停、部分首付、已售/不可用、代币

我尝试使用以下命令,但它使用它获得的第一个值填充整个列。

update mytable
set sold_status = (select (array['Available', 'On Hold', 'Partial Downpayment', 'Sold/Unavailable', 'Token Recieved'])[floor(random() * 5 + 1)])

我知道如何使用编程语言实现这一点,但我更喜欢使用 PostgreSQL 查询来实现这一点。

2 个答案:

答案 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)];