2つのフィールドを持つテーブルがあります。
var255
)SQL文でランダムデータを挿入したい。その説明はランダムなものにしたいです。
PS:PostgreSQLを使用しています。
これが「ランダムな説明」の要件に適合するかどうかは正確にはわかりません。完全なデータを生成するかどうかは明確ではありません。
test=# SELECT generate_series(1,10) AS id, md5(random()::text) AS descr;
id | descr
----+----------------------------------
1 | 65c141ee1fdeb269d2e393cb1d3e1c09
2 | 269638b9061149e9228d1b2718cb035e
3 | 020bce01ba6a6623702c4da1bc6d556e
4 | 18fad4813efe3dcdb388d7d8c4b6d3b4
5 | a7859b3bcf7ff11f921ceef58dc1e5b5
6 | 63691d4a20f7f23843503349c32aa08c
7 | ca317278d40f2f3ac81224f6996d1c57
8 | bb4a284e1c53775a02ebd6ec91bbb847
9 | b444b5ea7966cd76174a618ec0bb9901
10 | 800495c53976f60641fb4d486be61dc6
(10 rows)
次は私のために働いた:
create table t_random as select s, md5(random()::text) from generate_Series(1,5) s;
ここでは、最新の機能を使用したよりエレガントな方法です。 Unix辞書(/ usr/share/dict/words)を使用して、PostgreSQLデータにコピーします。
cp /usr/share/dict/words data/pg95/words.list
次に、次の手順で辞書の単語を使用して検索可能な意味のない説明のトンを簡単に作成できます。
1)テーブルと関数を作成します。 getNArraySは、配列内のすべての要素と、連結する必要がある回数を取得します。
CREATE TABLE randomTable(id serial PRIMARY KEY, description text);
CREATE OR REPLACE FUNCTION getNArrayS(el text[], count int) RETURNS text AS $$
SELECT string_agg(el[random()*(array_length(el,1)-1)+1], ' ') FROM generate_series(1,count) g(i)
$$
VOLATILE
LANGUAGE SQL;
すべての準備が整ったら、CTEを使用して挿入を実行します。
WITH t(ray) AS(
SELECT (string_to_array(pg_read_file('words.list')::text,E'\n'))
)
INSERT INTO randomTable(description)
SELECT getNArrayS(T.ray, 3) FROM T, generate_series(1,10000);
そして今、いつものように選択します:
postgres=# select * from randomtable limit 3;
id | description
----+---------------------------------------------
1 | ultracentenarian splenodiagnosis manurially
2 | insequent monopolarity funipendulous
3 | ruminate geodic unconcludable
(3 rows)
Sendance ==ステートメントと仮定しますか? Perlには優れたランダムデータジェネレーターがあるため、Perlまたはplperlを使用できます。 Perl CPANモジュールData :: Randomをチェックして開始します。
[〜#〜] cpan [〜#〜] から取得したいくつかの異なるランダムなものを生成するPerlスクリプトのサンプルを次に示します。
use Data::Random qw(:all);
my @random_words = Rand_words( size => 10 );
my @random_chars = Rand_chars( set => 'all', min => 5, max => 8 );
my @random_set = Rand_set( set => \@set, size => 5 );
my $random_enum = Rand_enum( set => \@set );
my $random_date = Rand_date();
my $random_time = Rand_time();
my $random_datetime = Rand_datetime();
open(FILE, ">Rand_image.png") or die $!;
binmode(FILE);
print FILE Rand_image( bgcolor => [0, 0, 0] );
close(FILE);