postgresql – 如何在Postgres表中的每个记录生成一个唯一的字符
发布时间:2020-12-13 16:27:39 所属栏目:百科 来源:网络整理
导读:说我有一张像帖子这样的表格,其中有一些像id,body,created_at这样的列.我想生成一个唯一的字符串,创建每个帖子,用于像url缩短器.所以也许是一个10个字符的字母数字字符串.它需要在表格中是唯一的,就像主键一样. 理想情况下,Postgres将有一种方法来处理这两个
说我有一张像帖子这样的表格,其中有一些像id,body,created_at这样的列.我想生成一个唯一的字符串,创建每个帖子,用于像url缩短器.所以也许是一个10个字符的字母数字字符串.它需要在表格中是唯一的,就像主键一样.
理想情况下,Postgres将有一种方法来处理这两个问题: >生成字符串 他们必须携手合作,因为我的目标是不用担心我的应用程序中的任何唯一性执行代码.
我不声称以下是有效的,但是我们过去是如何做这样的事情的.
CREATE FUNCTION make_uid() RETURNS text AS $$ DECLARE new_uid text; done bool; BEGIN done := false; WHILE NOT done LOOP new_uid := md5(''||now()::text||random()::text); done := NOT exists(SELECT 1 FROM my_table WHERE uid=new_uid); END LOOP; RETURN new_uid; END; $$LANGUAGE PLPGSQL VOLATILE; make_uid()可以用作my_table中的列的默认值.就像是: ALTER TABLE my_table ADD COLUMN uid text NOT NULL DEFAULT make_uid(); 可以调整md5(”|| now():: text || random():: text).你可以考虑编码(…,’base64′),除了base-64中使用的一些字符不是URL友好的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |