Cara membuat kolom dalam DB dengan string default nilai acak

10

Bisakah saya membuat kolom dalam tabel DB (PostgreSQL) yang memiliki string acak nilai default, dan bagaimana?

Jika tidak memungkinkan, beri tahu saya.

tasmaniski
sumber
silakan tanyakan lagi untuk MySQL jika Anda memerlukan jawaban untuk RDBMS itu juga
Jack mengatakan coba topanswers.xyz
Solusi UUID: stackoverflow.com/a/21684011/242933
ma11hew28

Jawaban:

11

Contoh 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)

Rupanya kamu bisa melakukan ini. (Tentu saja, Anda dapat menambahkan karakter lain juga, atau menggunakan generator string acak lainnya - seperti ini , misalnya.)

dezso
sumber
1
SELECT md5 (acak () :: teks); - Cukup, terima kasih!
tasmaniski
17

Solusinya adalah (untuk PGSQL):

alter TABLE users ADD column register_key text NOT NULL default md5(random()::text);
tasmaniski
sumber
1
Ini adalah trik yang indah!
cjauvin