在Postgres中如何为UUID主键列设置默认值?

16

我正在使用PostgreSQL。我尝试创建一个主键列,该列是UUID类型,因此我运行了以下语句:

ALTER TABLE my_object_times ADD PRIMARY KEY (id) DEFAULT uuid_generate_v4();

但是我遇到了错误

PG::SyntaxError: ERROR:  syntax error at or near "DEFAULT"

如何正确地编写上述语句(我正在执行 ALTER,因为我要更改现有的主键列)?


1
在dba.StackExchange.com上重复:Postgres中UUID列的默认值 - Basil Bourque
2个回答

24

如果表中已经存在列id,而您想通过将其设置为主键并添加默认值来进行修改,可以分为两个步骤完成:

ALTER TABLE my_object_times ADD PRIMARY KEY (id);
ALTER TABLE my_object_times ALTER COLUMN id SET DEFAULT uuid_generate_v4();

如果该列根本不存在,那么你可以通过简单地执行以下操作来创建具有所需所有属性的列:

ALTER TABLE my_object_times ADD id uuid PRIMARY KEY DEFAULT uuid_generate_v4();

(我现在无法测试,但应该可以正常工作)


3
SQL错误[42883]: 错误: 函数uuid_generate_v4()不存在 提示: 没有与给定名称和参数类型匹配的函数。您可能需要添加显式类型转换。 - Enrico

15
为了使用uuid_generate_v4(),您首先需要执行: CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

1
SQL错误[58P01]:错误:无法打开扩展控制文件“/usr/pgsql-12/share/extension/uuid-ossp.control”:没有这样的文件或目录。 - Fatur

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