0

したがって、int型のテーブルに配列列があります。100 万行の負荷テストを行っており、レコードごとに 4 つの配列要素がすべて異なる値で必要です。

INSERT INTO contacts (numbers)
SELECT '{4443331111, 2223334444, 2223339999, 8887779999}'
  FROM generate_series(1,2) AS x(id);

これにより 2 つのレコードが作成されますが、番号が一意である必要があります。

4

2 に答える 2

4

必要なのは、random()最大値を得るために適切な数値を掛けた関数です。ただし、その関数への 4 つの呼び出しから配列を作成する必要があります。

配列値を構築するためのわずかに異なる構文があり、ここでの作業が簡単になります。これは次のようになります。

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[]最後に a でキャストすることです。

SELECT ARRAY[random() * 1000000, random() * 1000000, random() * 1000000, random() * 1000000]::int[]
FROM generate_series(1,2) AS x(id);

Postgres ドキュメント: random(); 配列コンストラクター (キャスト ショートカットに関する注記を含む)

于 2013-05-01T16:47:21.623 に答える