所以我在一个类型为int的表上有一个数组列。我负载测试一百万行,每个记录需要四个数组元素,所有数据都有不同的值。
INSERT INTO contacts (numbers)
SELECT '{4443331111, 2223334444, 2223339999, 8887779999}'
FROM generate_series(1,2) AS x(id);
这创建了2条记录,但我需要数字是唯一的。
答案 0 :(得分:4)
您需要的是random()
函数,乘以一些合适的数字来表示您的最大值;但是你需要从对该函数的四次调用构造一个数组。
构造数组值的语法略有不同,这在这里更容易使用,如下所示:
SELECT ARRAY[4443331111, 2223334444, 2223339999, 8887779999]
由于您不需要将其构建为字符串,因此可以对数组的各个部分使用函数调用,这意味着它应该可以工作:
SELECT ARRAY[random() * 1000000, random() * 1000000, random() * 1000000, random() * 1000000]
FROM generate_series(1,2) AS x(id);
由于random()
返回浮点数并且您想要一个整数,因此您需要在某处使用强制转换。最容易编写的是在最后使用::int[]
转换整个数组,如下所示:
SELECT ARRAY[random() * 1000000, random() * 1000000, random() * 1000000, random() * 1000000]::int[]
FROM generate_series(1,2) AS x(id);
Postgres文档:random()
; array constructors (including note on the casting shortcut)
答案 1 :(得分:3)
INSERT INTO contacts (numbers)
SELECT distinct array[
(random() * 99999999)::integer,
(random() * 99999999)::integer,
(random() * 99999999)::integer,
(random() * 99999999)::integer
]
FROM generate_series(1, 1000000) AS x(id);
请注意,数字8887779999超出整数范围。所以也许你想要大整数。