如何使用默认值随机字符串在数据库中创建列

tas*_*ski 12 postgresql random default-value

我可以在 DB 表 (PostgreSQL) 中创建具有默认值随机字符串的列,以及如何创建?

如果不可能,请告诉我。

tas*_*ski 23

解决方案是(对于 PGSQL):

alter TABLE users ADD column register_key text NOT NULL default md5(random()::text);
Run Code Online (Sandbox Code Playgroud)

  • 如果需要限制,可以使用以下命令: ```alter TABLE users ADD column register_key text NOT NULL default substring(md5(random()::text), 0, 8);``` (3认同)

dez*_*zso 12

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)
Run Code Online (Sandbox Code Playgroud)

显然你可以做到这一点。(当然,您也可以添加其他字符,或者也可以使用其他随机字符串生成器 - 例如,像这样。)

  • 选择 md5(随机()::文本); - 就是这样,谢谢! (2认同)