我的目标是在表中插入新行时,自动插入主键字段.
如何从Postgresql中的会话到会话获得序列?
doubleemploi@hanbei:/home/yves$psql -d test Mot de passe : psql (8.4.13) Saisissez « help » pour l''aide. test=> create sequence test001 start 10; CREATE SEQUENCE test=> select currval('test001'); ERREUR: la valeur courante (currval) de la séquence « test00 » n''est pas encore définie dans cette session --- current value not yet defined this session (???) test=> select setval('test001',10); setval -------- 10 (1 ligne) test=> select currval('test00'); currval --------- 10 (1 ligne) test=> \q test@hanbei:/home/yves$psql -d test Mot de passe : psql (8.4.13) Saisissez « help » pour l''aide. test=> select currval('test001'); ERREUR: la valeur courante (currval) de la séquence « test00 » n''est pas encore définie dans cette session
这可能比你想象的更简单
原文链接:https://www.f2er.com/postgresql/191769.htmlMy objective is to get a primary key field automatically inserted when
inserting new row in the table.
只需设置列的默认值即可:
ALTER TABLE tbl ALTER COLUMN tbl_id SET DEFAULT nextval('my_seq'::regclass);
或者更简单的是,为主键创建具有serial
类型的表,首先是:
CREATE TABLE tbl( tbl_id serial PRIMARY KEY,col1 txt -- more columns );
它创建一个专用序列,并自动设置tbl_id的默认值.
这样,如果在INSERT中没有提到,tbl_id将自动从附加的序列中分配下一个值.适用于任何会话,并行与否.
INSERT INTO tbl(col1) VALUES ('foo');
如果你想要新的tbl_id做一些事情:
INSERT INTO tbl(col1) VALUES ('foo') RETURNING tbl_id;