如何在PostgreSQL中设置自动增量主键?

我在PostgreSQL有22列的表,我想添加一个自动增量主键。

我试图创build一个名为BIGSERIALtypes的id列,但是pgadmin回应了一个错误:

 ERROR: sequence must have same owner as table it is linked to. 

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

试试这个命令:

 ALTER TABLE your_table ADD COLUMN key_column BIGSERIAL PRIMARY KEY; 

用与创build表相同的DB用户来尝试。

自动递增postgresql中的主键:

第1步,创build你的表格:

 CREATE TABLE epictable ( mytable_key serial primary key, moobars VARCHAR(40) not null, foobars DATE ); 

第2步,像这样在你的表中插入值,注意mytable_key没有在第一个参数列表中指定,这导致默认序列自动增加。

 insert into epictable(moobars,foobars) values('delicious moobars','2012-05-01') insert into epictable(moobars,foobars) values('worldwide interblag','2012-05-02') 

第3步,从你的表中select*

 el@voyager$ psql -U pgadmin -d kurz_prod -c "select * from epictable" 

第四步,解释输出:

 mytable_key | moobars | foobars -------------+-----------------------+------------ 1 | delicious moobars | 2012-05-01 2 | world wide interblags | 2012-05-02 (2 rows) 

注意到mytable_key列已被自动增加。

普罗蒂普:

您应该始终在表上使用主键,因为postgresql在内部使用散列表结构来提高插入,删除,更新和select的速度。 如果主键列(这是强制唯一的和非空的)是可用的,则它可以依赖于为散列函数提供唯一的种子。 如果没有主键列可用,则散列函数变得效率低下,因为它select其他一组列作为键。

在postgresql中使用自定义序列创build一个自动递增主键:

第1步,创build你的序列:

 create sequence splog_adfarm_seq start 1 increment 1 NO MAXVALUE CACHE 1; ALTER TABLE fact_stock_data_detail_seq OWNER TO pgadmin; 

第2步,创build你的表

 CREATE TABLE splog_adfarm ( splog_key INT unique not null, splog_value VARCHAR(100) not null ); 

第3步,插入你的表

 insert into splog_adfarm values ( nextval('splog_adfarm_seq'), 'Is your family tree a directed acyclic graph?' ); insert into splog_adfarm values ( nextval('splog_adfarm_seq'), 'Ethics is a scam created by poor people to manipulate rich people.' ); 

第4步,观察行

 el@defiant ~ $ psql -U pgadmin -d kurz_prod -c "select * from splog_adfarm" splog_key | splog_value ----------+-------------------------------------------------------------------- 1 | Is your family tree a directed acyclic graph? 2 | Ethics is a scam created by poor people to manipulate rich people. (3 rows) 

这两行的键从1开始,按序列定义的那样递增1。

奖金Elite ProTip:

程序员讨厌打字,inputnextval('splog_adfarm_seq')很烦人。 你可以改为inputDEFAULT作为参数,就像这样:

 insert into splog_adfarm values ( DEFAULT, 'Sufficient intelligence to outwit a thimble.' ); 

为了上面的工作,你必须在splog_adfarm表上定义该键列的默认值。 哪个更漂亮

如果你想在pgadmin中做到这一点,那就容易多了。 看来在postgressql中,要为列添加自动增量,我们首先需要创build一个自动增量序列并将其添加到所需的列。 我喜欢这个。

1)首先你需要确保你的表有一个主键。 还要保持主键的数据types为bigint或smallint。 (我用bigint,找不到其他地方的其他答案中提到的称为serial的数据types)

2)然后通过右击序列添加一个序列 – > 添加新的序列 。 如果表格中没有数据,请保持原样,不要做任何改变。 只要保存它。 如果存在数据,则将主键列中的最后一个或最高值添加到定义选项卡中的当前值,如下所示。 在这里输入图像描述

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

在这里输入图像描述 确保序列名称在这里是正确的。 这是所有和自动增量应该工作。

也许我有点迟到回答这个问题,但我正在做这个问题在我的工作:)

我想写列'a_code'= c1,c2,c3,c4 …

首先,我打开了名为ref_id和typesserial 。 然后我用这个命令解决了我的问题:

 update myschema.mytable set a_code=cast('c'||"ref_id" as text)