自动递增不适用于串行类型的ID列

时间:2019-07-18 05:06:12

标签: postgresql

我有一个表,其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键所做的那样。

您能否让我知道我应该怎么做才能使其正常工作?

谢谢

1 个答案:

答案 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