PostgreSQLでレコードの値をランダムに更新する

※この方法は最小値と最大値の出現する確率が他の値と比べて半分になっており、均等な確率になっていない可能性あり。

PostgreSQLでレコードの値をランダムに更新したい場合は以下のようなSQLで実現できる。

update item 
set
    price = round((random() * (100 - 1000)) ::numeric, 0) + 1000 
where
    0.5 < random();

random()関数は0.0 <= x < 1.0の範囲のランダムな実数を取得するものである。

set句部分は以下のような構文でランダムな整数値を作成している。

round(( random() * (最小値 - 最大値) )::numeric, 0) + 最大値

where句部分は、random()関数の結果が0.5以上の場合のみ更新対象にするための指定としている。

参考(https://postgresweb.com/post-4946)