加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 16:33:19 所属栏目:百科 来源:网络整理
导读:我的目标是在表中插入新行时,自动插入主键字段. 如何从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
我的目标是在表中插入新行时,自动插入主键字段.

如何从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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读