postgres失败:SELECT currval(pg_get_serial_sequence(' interaction',' interact_id'))到iidX;

时间:2015-03-22 16:25:01

标签: php postgresql

我有一个用于报告错误的postgres函数。它使用了对

的调用
SELECT currval(pg_get_serial_sequence('interact', 'interact_id')) into xxx;

这个函数以两种方式从php中使用。在一个中,在调用函数之前访问表 interact 。在这种情况下,呼叫(似乎)有效。在第二种情况下,在调用函数之前不使用 interact ,并且函数失败并显示消息:

currval of sequence "interact_interact_id_seq" is not yet defined in this session
CONTEXT:  SQL statement "SELECT currval(pg_get_serial_sequence('interact', 'interact_id'))"
PL/pgSQL function "reporterror" line 5 at SQL statement
SQL statement "SELECT reportError( 'File(bname='|| bname || ' no location data:' || SQLERRM )"
PL/pgSQL function "uploadconfirm" line 32 at PERFORM in /home/berman/public_html/gps-photo.org/php/processFile.php on line 186

从psql中,您可以看到该表以及类似的错误消息,其中包含以下短语:'尚未在此会话中定义'。

 \dSt interact;
                                          Table "public.interact"
   Column    |            Type             |                           Modifiers                       
 webrequest  | text                        | not null
 interact_id | integer                     | not null default nextval('interact_interact_id_seq'::regclass)
 ctime       | timestamp without time zone | default now()
 uid         | integer                     | 
 successful  | boolean                     | default false
Indexes:
    "interact_pkey" PRIMARY KEY, btree (interact_id)
Referenced by:
    TABLE "files" CONSTRAINT "files_interac_fk" FOREIGN KEY (interact_id) REFERENCES interact(interact_id)

pony=> SELECT currval(pg_get_serial_sequence('interact', 'interact_id')) ;
ERROR:  currval of sequence "interact_interact_id_seq" is not yet defined in this session

我不知道我做错了什么。有人可以帮忙吗感谢。

1 个答案:

答案 0 :(得分:2)

你没有做错任何事;)你只需要"初始化"每个会话中的序列。它是通过调用nextval()来完成的。一旦你调用nextval - 你就可以调用currval(它将提供nextval最后返回的值)。

According to to the doc

  

currval(regclass)bigint - 返回值最近使用nextval 获取指定序列