Qui è un modo più elegante utilizzando le più recenti funzionalità. Userò il dizionario Unix (/ usr/share/dict/words) e copiarlo nella miei dati PostgreSQL:
cp /usr/share/dict/words data/pg95/words.list
Quindi, è possibile creare facilmente una tonnellata di alcuna descrizione senso, ma la ricerca utilizzando parole del dizionario con la seguenti passaggi:
1) Creare tabella e funzione. getNArrayS ottiene tutti gli elementi in una matrice e il numero di volte che ha bisogno di concatenare.
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;
Una volta che avete tutti a posto, eseguire l'inserto con 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);
Ed ora, selezionare come al solito:
postgres=# select * from randomtable limit 3;
id | description
----+---------------------------------------------
1 | ultracentenarian splenodiagnosis manurially
2 | insequent monopolarity funipendulous
3 | ruminate geodic unconcludable
(3 rows)
Perché non 'SELEZIONA generate_series (1,10) AS id, md5 (random() :: text) AS descr; '? –
@AntonyHatchkins Per nessuna buona ragione. Risolto il tuo suggerimento. Grazie – leonbloy