gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:09:36 25 4
gpt4 key购买 nike

假设我有一个像 posts 这样的表,它有典型的列,如 id、body、created_at。我想在创建每个帖子时生成一个唯一的字符串,用于 url 缩短器之类的东西。所以可能是一个 10 个字符的字母数字字符串。它需要在表中是唯一的,就像主键一样。

理想情况下,Postgres 有办法处理这两个问题:

  1. 生成字符串
  2. 确保其唯一性

而且它们必须齐头并进,因为我的目标是不必担心我的应用程序中的任何强制唯一性代码。

最佳答案

我不认为以下是有效的,但我们过去就是这样做的。

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) 可以根据口味进行调整。你可以考虑 encode(...,'base64') 除了 base-64 中使用的一些字符不是 URL 友好的。

关于postgresql - 如何在 Postgres 的表中为每条记录生成一个唯一的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19530736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com