首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PostgreSQL中设置自动增量主键?

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

Stack Overflow用户
提问于 2011-10-10 20:56:40
回答 9查看 559.4K关注 0票数 302

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

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

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

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

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-10-10 21:10:26

尝试以下命令:

代码语言:javascript
复制
ALTER TABLE your_table ADD COLUMN key_column BIGSERIAL PRIMARY KEY;

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

票数 344
EN

Stack Overflow用户

发布于 2012-10-17 00:44:32

在postgresql中自动递增主键:

创建表:

代码语言:javascript
复制
CREATE TABLE epictable
(
    mytable_key    serial primary key,
    moobars        VARCHAR(40) not null,
    foobars        DATE
);

将值插入到表中:

代码语言:javascript
复制
insert into epictable(moobars,foobars) values('delicious moobar','2012-05-01')
insert into epictable(moobars,foobars) values('WorldWideBlag','2012-05-02')

从表中选择*:

代码语言:javascript
复制
select * from epictable

mytable_key  |        moobars        |  foobars   
-------------+-----------------------+------------
           1 | delicious moobar      | 2012-05-01
           2 | WorldWideBlag         | 2012-05-02
(2 rows)

注意到mytable_key列已自动递增。

ProTips:

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

如果希望更多地控制串行密钥的行为,请参阅postgresql序列。

票数 293
EN

Stack Overflow用户

发布于 2012-11-02 00:27:56

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

步骤1,创建您的序列:

代码语言:javascript
复制
create sequence splog_adfarm_seq
    start 1
    increment 1
    NO MAXVALUE
    CACHE 1;
ALTER TABLE fact_stock_data_detail_seq
OWNER TO pgadmin;

步骤2,创建表

代码语言:javascript
复制
CREATE TABLE splog_adfarm
(
    splog_key    INT unique not null,
    splog_value  VARCHAR(100) not null
);

步骤3,插入表

代码语言:javascript
复制
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,观察行

代码语言:javascript
复制
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。

奖金精英ProTip:

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

代码语言:javascript
复制
insert into splog_adfarm values (
    DEFAULT, 
    'Sufficient intelligence to outwit a thimble.'
);

要使上面的内容正常工作,您必须为splog_adfarm表上的键列定义一个默认值。这更漂亮。

票数 42
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7718585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档