postgresql – currval尚未定义此会话,如何获取多会话序列?

前端之家收集整理的这篇文章主要介绍了postgresql – currval尚未定义此会话,如何获取多会话序列?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的目标是在表中插入新行时,自动插入主键字段.

如何从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
这可能比你想象的更简单

My 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;
原文链接:https://www.f2er.com/postgresql/191769.html

猜你在找的Postgre SQL相关文章