【发布时间】:2014-03-09 10:00:24
【问题描述】:
我尝试了好几个小时来做到这一点。我需要创建 100.000 行,时间戳是主键。这就是为什么它必须是独一无二的。
我写了一些代码,它可以生成 100 个随机时间戳,但如果我尝试超过 100 个,例如 1000 或 10000,我就会出现错误,就像那样
错误:重复键值违反唯一约束“position_pkey” SQL状态:23505详细信息:键(“时间戳”)=(2014-03-09 04:03:16.843499) 已经存在。
我不知道如何创建 100.000 个唯一时间戳。
这是我的功能
CREATE OR REPLACE FUNCTION generate_random(count integer DEFAULT 1)
RETURNS SETOF timestamp AS
$BODY$
BEGIN
RETURN QUERY SELECT distinct NOW()::timestamp + '10ms'::interval *RANDOM()*RANDOM()
FROM generate_series(0,count);
--SELECT (NOW() - '10000000'::INTERVAL * ROUND(RANDOM() * RANDOM()))::timestamp
-- FROM GENERATE_SERIES(1, count);
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 1000;
这是 generate_random 函数,它随机生成双数。
CREATE OR REPLACE FUNCTION generate_random(c integer DEFAULT 1, min double precision DEFAULT 0.0, max double precision DEFAULT 1.0)
RETURNS SETOF double precision AS
$BODY$
BEGIN
RETURN QUERY SELECT min + (max - min) * RANDOM()
FROM GENERATE_SERIES(1, c);
END;
$BODY$
LANGUAGE plpgsql VOLATILE STRICT
COST 100
ROWS 1000;
我在查询中这样调用这个函数
INSERT INTO "mytable"(
"timestamp", x, y, z)
VALUES (generate_random(1000), generate_random(1000, 0, 50), generate_random(1000, 0, 50), generate_random(1000, 0, 50));
所以,我想创建 100.000 行,它们是唯一的时间戳和一些随机双数(无论是否唯一)
【问题讨论】:
标签: sql postgresql random timestamp