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;

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...