说我有一张像帖子这样的表格,其中有一些像id,body,created_at这样的列.我想生成一个唯一的字符串,创建每个帖子,用于像url缩短器.所以也许是一个10个字符的字母数字字符串.它需要在表格中是唯一的,就像主键一样.
理想情况下,Postgres将有一种方法来处理这两个问题:
>生成字符串
确保其独特性
他们必须携手合作,因为我的目标是不用担心我的应用程序中的任何唯一性执行代码.
我不声称以下是有效的,但是我们过去是如何做这样的事情的.
原文链接:https://www.f2er.com/postgresql/192649.htmlCREATE 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友好的.