PostgreSQL如何生成含1000行多类型随机值的数据表
PostgreSQL生成含指定随机值的1000行表实现方案
各字段随机值生成逻辑
- 1-100闭区间随机整数:利用
random()返回[0,1)浮点数的特性,缩放后转整数即可,表达式为floor(random() * 100 + 1)::int - 含空值的1-100随机整数:通过随机数判断是否返回空,可自行调整空值概率,示例中空值概率为20%,表达式为
case when random() < 0.2 then null else floor(random() * 100 + 1)::int end - 0-100闭区间随机浮点数:直接对
random()结果缩放,若需要严格包含100可微调乘数抵消random()的开区间特性,表达式为random() * 100.00001 - 含空值的0-100随机浮点数:同上增加空值判断逻辑,表达式为
case when random() < 0.2 then null else random() * 100.00001 end - 随机M/F性别值:按50%概率随机返回两种值,表达式为
case when random() < 0.5 then 'M' else 'F' end - 含空值的随机M/F性别值:增加空值判断逻辑,表达式为
case when random() < 0.2 then null when random() < 0.5 then 'M' else 'F' end - 固定列表内随机城市:先定义城市数组,再通过随机下标取值,数组长度和元素可自行修改,表达式为
(array['newyork', 'london', 'mumbai', 'dubai'])[floor(random() * 4 + 1)::int] - 含空值的随机城市:增加空值判断逻辑,表达式为
case when random() < 0.2 then null else (array['newyork', 'london', 'mumbai', 'dubai'])[floor(random() * 4 + 1)::int] end
完整建表语句
直接执行以下语句即可生成符合要求的1000行测试表:
create table random_test as select -- 1-100随机整数 floor(random() * 100 + 1)::int as rand_int_1_100, -- 含空值的1-100随机整数 case when random() < 0.2 then null else floor(random() * 100 + 1)::int end as rand_int_1_100_nullable, -- 0-100随机浮点数 random() * 100.00001 as rand_float_0_100, -- 含空值的0-100随机浮点数 case when random() < 0.2 then null else random() * 100.00001 end as rand_float_0_100_nullable, -- 随机M/F性别 case when random() < 0.5 then 'M' else 'F' end as gender, -- 含空值的随机M/F性别 case when random() < 0.2 then null when random() < 0.5 then 'M' else 'F' end as gender_nullable, -- 随机城市 (array['newyork', 'london', 'mumbai', 'dubai'])[floor(random() * 4 + 1)::int] as city, -- 含空值的随机城市 case when random() < 0.2 then null else (array['newyork', 'london', 'mumbai', 'dubai'])[floor(random() * 4 + 1)::int] end as city_nullable from generate_series(1, 1000) s(i);
自定义调整说明
如果需要修改空值出现的概率,只需把case when random() < 0.2里的0.2改成对应比例即可,比如要30%概率为空就改成0.3;如果要修改城市列表,直接替换数组里的元素,同时把random() * 4里的4改成你新的城市列表长度即可。
内容的提问来源于stack exchange,提问作者Santhosh
相关产品推荐
相关产品推荐

