2010-07-30 40 views
28

Tôi có một bảng với hai lĩnh vực:SQL cư bảng với dữ liệu ngẫu nhiên

  1. id (uuid) đó là PrimaryKey và
  2. mô tả (var255)

Tôi muốn chèn dữ liệu ngẫu nhiên với sql sentance. Tôi muốn mô tả đó sẽ là một cái gì đó ngẫu nhiên.

Some1 có thể giúp tôi với điều này không?

PS: im sử dụng postgresql.

Trả lời

50

Tôi không biết chính xác nếu điều này phù hợp với các yêu cầu về một "mô tả ngẫu nhiên", và nó không phải là rõ ràng nếu bạn muốn tạo ra các dữ liệu đầy đủ: nhưng, ví dụ, điều này tạo ra 10 hồ sơ với id liên tiếp và ngẫu nhiên văn bản:

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) 
+3

Tại sao không 'CHỌN generate_series (1,10) AS id, md5 (random() :: text) AS descr; '? –

+0

@AntonyHatchkins Không có lý do chính đáng. Đã sửa lỗi theo đề xuất của bạn. Cảm ơn – leonbloy

1

Tôi giả định tuyên bố sentance ==? Bạn có thể sử dụng perl hoặc plperl như perl có một số máy phát dữ liệu ngẫu nhiên tốt. Kiểm tra mô-đun CPAN perl Dữ liệu :: Ngẫu nhiên để bắt đầu.

Đây là mẫu của tập lệnh perl để tạo một số nội dung ngẫu nhiên khác nhau được lấy từ CPAN.

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); 
14

Nó phù hợp với tôi. Đã tìm thấy here.

create table t_random as select s, md5(random()::text) from generate_Series(1,5) s; 
+0

Có ích khi biết cách thực hiện chuỗi thời gian trong phần truy vấn. Cảm ơn đã theo lên. –

5

Đây là cách thanh lịch hơn bằng các tính năng mới nhất. Tôi sẽ sử dụng từ điển Unix (/ usr/share/dict/words) và sao chép nó vào dữ liệu PostgreSQL của tôi:

cp /usr/share/dict/words data/pg95/words.list 

Sau đó, bạn có thể dễ dàng tạo ra một tấn không có mô tả cảm giác NHƯNG tìm kiếm được sử dụng các từ điển với các bước sau:

1) Tạo bảng và chức năng. getNArrayS nhận tất cả các phần tử trong một mảng và số lần nó cần ghép lại.

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; 

Một khi bạn có tất cả tại chỗ, chạy chèn sử dụng 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); 

Và bây giờ, chọn như thường lệ:

postgres=# select * from randomtable limit 3; 
id |     description     
----+--------------------------------------------- 
    1 | ultracentenarian splenodiagnosis manurially 
    2 | insequent monopolarity funipendulous 
    3 | ruminate geodic unconcludable 
(3 rows) 
Các vấn đề liên quan