我在PostgreSQL中有一个包含多个列的表,我想添加一个自动增量主键。
我试图创建一个名为id的BIGSERIAL类型的列,但是pgadmin响应时出现了错误:
错误:序列必须具有与其链接的表相同的所有者。
有人知道如何解决这个问题吗?如何在不重新创建表的情况下在PostgreSQL中添加或创建自动递增的主键?
发布于 2011-10-10 21:10:26
尝试以下命令:
ALTER TABLE your_table ADD COLUMN key_column BIGSERIAL PRIMARY KEY;尝试使用与创建表相同的DB-用户。
发布于 2012-10-17 00:44:32
在postgresql中自动递增主键:
创建表:
CREATE TABLE epictable
(
mytable_key serial primary key,
moobars VARCHAR(40) not null,
foobars DATE
);将值插入到表中:
insert into epictable(moobars,foobars) values('delicious moobar','2012-05-01')
insert into epictable(moobars,foobars) values('WorldWideBlag','2012-05-02')从表中选择*:
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序列。
发布于 2012-11-02 00:27:56
在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。
奖金精英ProTip:
程序员讨厌打字,而输入nextval('splog_adfarm_seq')则很烦人。您可以为该参数键入DEFAULT,如下所示:
insert into splog_adfarm values (
DEFAULT,
'Sufficient intelligence to outwit a thimble.'
);要使上面的内容正常工作,您必须为splog_adfarm表上的键列定义一个默认值。这更漂亮。
https://stackoverflow.com/questions/7718585
复制相似问题