所以我有一個類型爲int的表上的數組列。我正在爲一百萬行進行負載測試,並且每個記錄需要四個數組元素,每個元素都有不同的值postgres在數組列中插入隨機數
INSERT INTO contacts (numbers)
SELECT '{4443331111, 2223334444, 2223339999, 8887779999}'
FROM generate_series(1,2) AS x(id);
這創建2條記錄,但我需要的數字是唯一的。
所以我有一個類型爲int的表上的數組列。我正在爲一百萬行進行負載測試,並且每個記錄需要四個數組元素,每個元素都有不同的值postgres在數組列中插入隨機數
INSERT INTO contacts (numbers)
SELECT '{4443331111, 2223334444, 2223339999, 8887779999}'
FROM generate_series(1,2) AS x(id);
這創建2條記錄,但我需要的數字是唯一的。
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超出整數的範圍。所以也許你想要大整數。
看起來不錯。現在測試 – joncodo 2013-05-01 16:51:43
你需要的是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)
順便說一句,從你的表名猜測,這些電話號碼?如果是這樣,你可能不希望將它們存儲爲整數,因爲電話號碼可以具有前導零,這將在整數列中神祕地消失。 (北美以外的地區代碼以0開始與本地號碼區分,00代表國際撥號) – IMSoP 2013-05-01 17:04:09
感謝您的輸入,但這僅僅是一個示例。沒有實際的數據被問到這個問題:) – joncodo 2013-05-01 17:07:08
哈,夠公平的:) – IMSoP 2013-05-01 17:19:53