如何在Postgres中使用UUID作为默认ID?

5

在mongodb宣布放弃之后,我们正在迁移到postgres,注意到ID仅仅是数字并且自动增加。

我尝试过:

  1. 使用生命周期钩子将默认ID设置为UUID - 无效
  2. 安装了bookshelf-uuid

有人知道如何实现吗? 我非常不希望我的帖子ID是自动增加的数字。

1个回答

8

自增id和uuid通常是不同的概念。对于uuid作为主键,我们通常使用随机值。由于值范围巨大,重复几乎不可能。

您可以按照以下方式定义自动生成的uuid主键:

CREATE TABLE my_table (
    id UUID DEFAULT MD5(RANDOM()::TEXT || CLOCK_TIMESTAMP()::TEXT)::UUID PRIMARY KEY,
    … other column definitions …
);

pgcrypto扩展还提供了用于创建随机UUID的函数。

CREATE EXTENSION IF NOT EXISTS pgcrypto;
CREATE TABLE my_table (
    id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
    … other column definitions …
);

在Postgres 13中,不再需要创建pgcrypto扩展来使用gen_random_uuid()


3
从PostgreSQL 13开始,无需安装扩展即可使用gen_random_uuid:https://www.postgresql.org/docs/current/functions-uuid.html - Jeremy
@Jeremy 感谢你的提示。我有类似的想法,但不确定是哪个版本。我已经更新了我的帖子。 - clemens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接