Cómo crear una columna en la base de datos con una cadena aleatoria de valor predeterminado

10

¿Puedo crear una columna en la tabla DB (PostgreSQL) que tenga una cadena aleatoria de valor predeterminado, y cómo?

Si no es posible, hágamelo saber.

tasmaniski
fuente
pregunte nuevamente por MySQL si necesita una respuesta para ese RDBMS también
Jack dice que intente topanswers.xyz
Solución UUID: stackoverflow.com/a/21684011/242933
ma11hew28

Respuestas:

11

Ejemplo de PostgreSQL:

CREATE OR REPLACE FUNCTION f_random_text(
    length integer
)
RETURNS text AS
$body$
WITH chars AS (
    SELECT unnest(string_to_array('A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9', ' ')) AS _char
),
charlist AS
(
    SELECT _char FROM chars ORDER BY random() LIMIT $1
)
SELECT string_agg(_char, '')
FROM charlist
;
$body$
LANGUAGE sql;


DROP TABLE IF EXISTS tmp_test;


CREATE TEMPORARY TABLE tmp_test (
    id serial,
    data text default f_random_text(12)
);


INSERT INTO tmp_test
VALUES 
    (DEFAULT, DEFAULT),
    (DEFAULT, DEFAULT)
;


SELECT * FROM tmp_test;

 id |     data
----+--------------
  1 | RYMUJH4E0NIQ
  2 | 7U4029BOKAEJ
(2 rows)

Aparentemente puedes hacer esto. (Por supuesto, también puede agregar otros caracteres o usar otro generador de cadenas al azar, como este , por ejemplo).

dezso
fuente
1
SELECCIONAR md5 (random () :: text); - Eso es, gracias!
tasmaniski
17

La solución es (para PGSQL):

alter TABLE users ADD column register_key text NOT NULL default md5(random()::text);
tasmaniski
fuente
1
Este es un hermoso truco!
cjauvin