我有一个表,其DDL如下所示
create table if not exists people
(
id serial not null
constraint people_pkey
primary key,
name varchar,
height varchar,
mass varchar,
hair_color varchar,
skin_color varchar,
eye_color varchar,
birth_year varchar,
gender varchar,
planet_id integer
constraint people_planet_id_fkey
references planet,
created varchar,
edited varchar,
url varchar
);
这就是说,当我尝试插入数据而没有提到id
时,我收到消息,提示id
列的值已经存在(它抱怨ID Postgres Engine选择的ID已经存在-这是正确的)。我以为Postgres会自动计算并使用正确的值,就像MS SQL Server使用IDENTITY
键所做的那样。
您能否让我知道我应该怎么做才能使其正常工作?
谢谢
答案 0 :(得分:1)
您应该删除NOT NULL
列上的id
约束:
id serial constraint people_pkey primary key,
或对NOT NULL
使用以下变体:
id integer NOT NULL DEFAULT nextval('table_name_id_seq') constraint people_pkey primary key
serial
类型已经在幕后NOT NULL
。