在使用 mongodb 一段时间后,我正在尝试学习 postgres,我想知道如何为每个 comment
设置一个唯一的 ID。
我有一个外键 userId
,用户为其创建了评论,但对于主键,我需要某种类型的 commentId
。可以为我的 commentId
使用 SERIAL
吗?或者,有没有像 UUID 这样更好的方法?我不知道我是否需要迁移数据。
最佳答案
由于您对评论 ID 的实际值不感兴趣(只是它存在并且是唯一的事实),serial
是此类列的不错选择。请注意,在现代 PostgreSQL 数据库(自 7.3 起)中,创建 serial
并不自动意味着它将具有唯一约束,因此您必须明确地处理它。例如:
CREATE TABLE comments (
comment_id SERIAL PRIMARY KEY,
user_id INT REFERENCES users(id), -- You should probably also index it
comment VARCHAR(200) -- Or any other reasonable size
)
编辑:
要回答评论中的问题,可以为 UUID
列创建类似的行为,方法是为其指定新生成的 UUID
的默认值。
首先,您必须安装 postgres-contrib` 包(如果您还没有安装的话)。例如,在基于 Red Hat 的 linux 上,您可以运行(作为 root):
$ dnf install postgresql-contrib
然后,您需要从特权用户创建扩展:
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
这将创建一个您可以使用的 generate_uuid_v1
函数:
CREATE TABLE comments (
comment_id UUID DEFAULT UUID_GENERATE_V1() PRIMARY KEY,
user_id INT REFERENCES users(id), -- You should probably also index it
comment VARCHAR(200) -- Or any other reasonable size
)
关于postgresql - 在创建用户所有评论的表时,使用 SERIAL 作为主键是否合适?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41975824/