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

Posted

技术标签:

【中文标题】如何在 Postgres 中为 UUID 主键列设置默认值?【英文标题】:How do I set a default value for a UUID primary key column in Postgres? 【发布时间】:2016-09-07 19:59:15 【问题描述】:

我正在使用 PostgreSQL。我正在尝试创建一个主键列 taht 是一个 UUID,所以我运行了这个语句

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

但我得到了错误

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

编写上述语句的正确方法是什么(我正在更改,因为我正在更改现有的主键列)?

【问题讨论】:

复制到 dba.StackExchange.com:Default value for UUID column in Postgres 【参考方案1】:

如果表中已经存在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();

(我现在无法测试,但应该可以)

【讨论】:

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

为了使用uuid_generate_v4(),首先需要执行:

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

【讨论】:

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

以上是关于如何在 Postgres 中为 UUID 主键列设置默认值?的主要内容,如果未能解决你的问题,请参考以下文章

sQL数据库表的主键列设为标识,增量为1,下次插入数据时能不插入主键列吗

Node.js Sequelize UUID 主键 + Postgres

如何在 SQLAlchemy 中使用 UUID?

SQL:向数据库表添加新的主键列

如何在 Spring Boot 上使用 Hibernate 生成自动 UUID

mysql创建数据库时怎么将主键设置为UUID,建表语句怎么写