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

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

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

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

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


试试这个命令:

ALTER TABLE your_table ADD COLUMN key_column BIGSERIAL PRIMARY KEY;

使用与创建表相同的DB用户来尝试它。


自动递增postgresql中的主键:

第1步,创建你的表格:

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步,从你的表中选择*:

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

第4步,解释输出:

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

注意mytable_key列已经自动增加。

专家提示:

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


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

第1步,创建您的序列:

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

第2步,创建你的表

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'), 
    'Will the smart cookies catch the crumb?  Find out now!'
);

第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 | Will the smart cookies catch the crumb?  Find out now!
(3 rows)

这两行的键从1开始,并按序列定义的方式递增1。

奖金Elite ProTip:

程序员讨厌打字,输入nextval('splog_adfarm_seq')很烦人。 您可以改为为该参数键入DEFAULT ,如下所示:

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

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

链接地址: http://www.djcxy.com/p/95203.html

上一篇: How to set auto increment primary key in PostgreSQL?

下一篇: Remove all special characters with RegExp