3

I'm running an INSERT query from one php file, but then I need to get the last inserted id from an external php file so as to run another query based on that id. How can I pull this off using CURRVAL or RETURNING? From the external php file, if I do something like

$result = pg_query($db,"SELECT CURRVAL('app.example_id_seq'), ... "); I get no results.

4

2 回答 2

6

您可以像查询表一样查询序列:

SELECT last_value
FROM app.example_id_seq
WHERE is_called;

如果序列从未被使用过,这将不返回任何结果(然后is_calledis FALSE)。

但这是一个不好的值来确定新插入的表行的 ID。只有在插入行后没有其他人使用该序列时,它才会起作用。此外,您无法确定插入是否失败。

于 2018-01-15T14:01:20.170 回答
0

不确定您示例中的树点是做什么用的。然而:

select currval('app.example_id_seq'::regclass);

应该管用。有时它可能会失败:

ERROR:  55000: currval of sequence "example_id_seq" is not yet defined in this session

nextval所以之前什么都没有调用currval。但是,如果您调用insert into了哪个有效,那也currval必须有效。

要开始使用RETURNING,请访问文档- 提供了示例。基本上,您列出的列名应该是插入或更新的结果。

于 2018-01-15T14:03:40.013 回答