postgresql – 如何在Postgres表中的每个记录生成一个唯一的字符串?

前端之家收集整理的这篇文章主要介绍了postgresql – 如何在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友好的.

原文链接:https://www.f2er.com/postgresql/192649.html

猜你在找的Postgre SQL相关文章