Para generar un campo de texto con contenido aleatorio en minúsculas y una longitud de 15 carácteres
SELECT array_to_string(ARRAY(SELECT chr((97 + round(random() * 25)) :: integer) FROM generate_series(1,15)), '');
/* Resultado:
array_to_string
text
-----------------
ohmqjtxxqbtqinq
*/
Para generar un campo de texto con contenido aleatorio en MAYÚSCULAS y una longitud de 15 carácteres
SELECT array_to_string(ARRAY(SELECT chr((65 + round(random() * 25)) :: integer) FROM generate_series(1,15)), '');
/* Resultado:
array_to_string
text
-------------------
ZPGVXSNNTWFBMDY
*/
Para generar un campo de texto con contenido aleatorio numérico y una longitud de 15 carácteres
SELECT array_to_string(ARRAY(SELECT chr((48 + round(random() * 9)) :: integer) FROM generate_series(1,15)), '');
/* Resultado:
array_to_string
text
-----------------
132443402808481
*/
Para generar un campo de texto con contenido aleatorio mixto y una longitud de 15 carácteres
SELECT array_to_string(ARRAY(SELECT chr((48 + round(random() * 59)) :: integer) FROM generate_series(1,15)), '');
/* Resultado:
array_to_string
text
-----------------
`E07<k6@7RKS@CL
*/
Existe el inconveniente cuando se utiliza este tipo de Sub-Select para crear contenido aleatorio, al tratar de INSERTAR o ACTUALIZAR un bloque de N cantidad de registros o filas, el random, genera la primera secuencia y la copia para todos los registros de ese mismo bloque. Esto significa que no genera contenido aleatorio individual para cada fila.
Ejemplo utilizado para mostrar como funciona el RANDOM() con números:
SELECT random(), (SELECT random()) FROM generate_series(1, 10);
random | ?column?
——————-+——————
0.550964544992894 | 0.45336384838447
0.520431810524315 | 0.45336384838447
0.321107998024672 | 0.45336384838447
0.820279272738844 | 0.45336384838447
0.653049356769770 | 0.45336384838447
0.246940688695759 | 0.45336384838447
0.430517273023725 | 0.45336384838447
0.189436422195286 | 0.45336384838447
0.633126459084451 | 0.45336384838447
0.309205084107816 | 0.45336384838447
(10 rows)
Ejemplo corriegiendo el problema utilizando el RANDOM() con números:
SELECT random(), (SELECT random() WHERE g = g) FROM generate_series(1, 10) g;
random | ?column?
———————-+———————
0.0103594129905105 | 0.856707542203367
0.8108195732347670 | 0.795368006452918
0.1217648717574780 | 0.762820852920413
0.0032475236803293 | 0.906903445255011
0.4030136042274530 | 0.009926503524184
0.2756332247518000 | 0.380658345762640
0.9583568405359980 | 0.812478603329509
0.0009200032800436 | 0.641435556113720
0.9266381538473070 | 0.870854197070003
0.4548341291956600 | 0.163001372478902
(10 rows)