首页 > 解决方案 > 如何使用 uuid 作为 postgres 的默认 ID?

问题描述

在关于删除 mongodb 的公告之后,目前正在迁移到 postgres,只是注意到 ID 只是数字并且自动递增。

我努力了:

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

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

标签: javascriptpostgresqlnext.jsstrapibookshelf.js

解决方案


自动递增的 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 …
);

gen_random_uuid()使用 Postgres 13,不再需要创建用于使用的 pgcrypto 扩展。


推荐阅读