如何使用 uuid 作为 postgres 的默认 ID?
How to use a uuid as default ID with postgres?
目前在迁移到 postgres 的过程中,在发布关于删除 mongodb 的公告后,刚刚注意到 ID 只是数字并且会自动递增。
我试过:
- 将默认 ID 设置为带有生命周期挂钩的 UUID - 无效
- 正在安装 bookshelf-uuid
有人知道怎么做吗?我非常不希望我的 post 的 ID 是一个自动递增的数字。
自动递增的ids和uuids通常是不同的概念。对于 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,不再需要为使用 gen_random_uuid()
创建 pgcrypto 扩展。
目前在迁移到 postgres 的过程中,在发布关于删除 mongodb 的公告后,刚刚注意到 ID 只是数字并且会自动递增。
我试过:
- 将默认 ID 设置为带有生命周期挂钩的 UUID - 无效
- 正在安装 bookshelf-uuid
有人知道怎么做吗?我非常不希望我的 post 的 ID 是一个自动递增的数字。
自动递增的ids和uuids通常是不同的概念。对于 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,不再需要为使用 gen_random_uuid()
创建 pgcrypto 扩展。