我有一个报告错误的postgres函数。它用一个电话
SELECT currval(pg_get_serial_sequence('interact', 'interact_id')) into xxx;
这个函数在php中有两种用法。其中一种方法是在调用函数之前访问表交互。在这种情况下,这些呼叫似乎起作用了。在第二种情况下,在调用函数之前不使用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
我不知道我做错了什么。有人能帮忙吗。谢谢。
最佳答案
你没有做错什么;)你只需要在每个会话中“初始化”序列。这是通过调用nextval()完成的。一旦你调用nextval-你就可以调用currval(它将给出nextval最后返回的值)。
According to to the doc:
currval(regclass)bigint-最近使用nextval为指定序列获取的返回值