加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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友好的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读