0

我在 PostgreSQL 的 SQL 表中有一个名为“id”的主键列。这是一个“大系列”专栏。我想将该列转换为“UUID”列。它在终端中输入以下命令:

alter table people alter column id uuid;

alter table people alter column id uuid using (uuid_generate_v4());

但他们都没有工作。

在两次尝试中,我都收到了错误消息

错误:“uuid”处或附近的语法错误

第 1 行:alter table people 使用 (uuid_generate... 更改列 id uuid

什么是正确的语法?

4

2 回答 2

1

首先uuid_generate_v4()是一个由名为uuid-ossp. 您应该使用以下方式安装该扩展程序;

CREATE EXTENSION uuid-ossp;

Postgresql 13 引入了一个新功能,该功能基本相同,无需安装扩展。该函数称为gen_random_uuid()

假设我们有一张像下面这样的表格;

CREATE TABLE people (
   id bigserial primary key,
   data text
);

bigserial不是真正的类型。这是一个宏,它基本上创建了具有默认值和序列的 bigint 列。默认值是该序列的下一个值。

对于您的用例,要更改数据类型,您首先应该删除旧的默认值。然后,改变类型,最后添加新的默认值表达式。这是示例:

ALTER TABLE people
  ALTER id DROP DEFAULT,  
  ALTER id TYPE uuid using (gen_random_uuid() /* or uuid_generate_v4() */ ), 
  ALTER id SET DEFAULT gen_random_uuid() /* or uuid_generate_v4() */ ;
于 2021-10-07T23:51:25.353 回答
0
CREATE TABLE IF NOT EXISTS people (
id uuid NOT NULL CONSTRAINT people_pkey PRIMARY KEY,
address varchar,
    city varchar(255),
    country varchar(255),
    email varchar(255),
    phone varchar(255)
); 

这是在 postgres SQL 中创建表的正确语法,最好在开始时执行这些约束以避免任何错误。要使用 alter 命令,您将执行以下操作:

ALTER TABLE 客户添加列 cid uuid 主键;

您在编写小写或未定义命令时可能发现的大多数错误都会更正表名或列。

于 2021-10-07T22:36:11.140 回答