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

Populate a table column randomly with values from a list in PostgreSQL

我想用以下值随机填充 table 中的一列: 可用,暂停,部分首付,Sold/Unavailable,令牌

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

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

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

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.

虽然 PostgreSQL 跟踪简单表达式的波动性,但它不跟踪不包含对外部查询的引用的子 selects 的波动性。您可以通过引入对外部查询的人工引用来解决此问题,但在您的情况下,您首先不需要子 select,所以只需删除它即可。

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