【问题标题】:How to use a uuid as default ID with postgres?如何使用 uuid 作为 postgres 的默认 ID?
【发布时间】:2021-05-14 16:08:36
【问题描述】:

在宣布放弃 mongodb 后,目前正在迁移到 postgres,刚刚注意到 ID 只是数字并且自动递增。

我试过了:

  1. 将默认 ID 设置为带有生命周期挂钩的 UUID - 无效
  2. 安装 bookshelf-uuid

有人知道怎么做吗?我非常不希望我的帖子的 ID 是一个自动递增的数字。

【问题讨论】:

    标签: javascript postgresql next.js strapi bookshelf.js


    【解决方案1】:

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

    您可以按如下方式定义自动生成的 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,不再需要创建用于使用 gen_random_uuid() 的 pgcrypto 扩展。

    【讨论】:

    • 从 postgres 13 开始,无需安装扩展即可使用 gen_random_uuid:postgresql.org/docs/current/functions-uuid.html
    • @Jeremy 感谢您的提示。我有类似的想法,但不再确定它是哪个版本。我已经更新了我的帖子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 2020-06-13
    • 2020-05-26
    相关资源
    最近更新 更多