我在PostgreSQL中有一个有很多列的表,我想添加一个自动递增的主键。

我试图创建一个名为BIGSERIAL类型id的列,但pgadmin响应一个错误:

错误:序列必须与它所链接的表具有相同的所有者。

有人知道如何解决这个问题吗?我如何在PostgreSQL中添加或创建一个自动递增的主键而不重新创建表?


当前回答

试试这个命令:

ALTER TABLE your_table ADD COLUMN key_column BIGSERIAL PRIMARY KEY;

尝试使用创建表的同一个db -用户。

其他回答

试试这个命令:

ALTER TABLE your_table ADD COLUMN key_column BIGSERIAL PRIMARY KEY;

尝试使用创建表的同一个db -用户。

如果您希望在pgadmin中执行此操作,则要容易得多。似乎在postgressql中,要向列中添加一个自动增量,我们首先需要创建一个自动增量序列,并将其添加到所需的列中。我确实喜欢这个。

1)首先,你需要确保你的表有一个主键。同时,主键的数据类型保持为大整型或小整型。(我使用了bigint,找不到一个数据类型称为串行,如在其他地方提到的其他答案)

2)然后添加序列右击序列->添加新序列。 如果表中没有数据,保持序列不变,不要做任何更改。保存它。 如果有现有数据,将主键列中的最后一个或最大值添加到定义选项卡中的Current值,如下所示。

3)最后,将行nextval('your_sequence_name'::regclass)添加到主键的默认值中,如下所示。

确保这里的序列名称是正确的。这是所有和自动增量应该工作。

在PgAdmin上执行的步骤:

创建序列//如果表存在最后一个id 添加这个序列到主键,table - properties - columns - column_id(主键)edit - Constraints -添加nextval(' sequunence_title '::regclass)到 字段default。

如果您想在序列中使用数字,请使用以下内容定义一个新序列

CREATE SEQUENCE public.your_sequence
    INCREMENT 1
    START 1
    MINVALUE 1
;

然后修改表,使用id的序列:

ALTER TABLE ONLY table ALTER COLUMN id SET DEFAULT nextval('your_sequence'::regclass);

我已经尝试了以下脚本,以成功地自动增加PostgreSQL中的主键。

CREATE SEQUENCE dummy_id_seq
    START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;

CREATE table dummyTable (
    id bigint DEFAULT nextval('dummy_id_seq'::regclass) NOT NULL,
    name character varying(50)
);

编辑:

CREATE table dummyTable (
    id SERIAL NOT NULL,
    name character varying(50)
)

SERIAL关键字自动为各自的列创建一个序列。