如何在使用 pg_insert() 后确定插入行的 pkey?

How can one determine the pkey of an inserted row after using pg_insert()?

我需要能够识别我在使用 pg_insert 后刚刚插入的行,但文档只是说它 returns true/false。如何从 pg_insert() 确定记录的 pkey?我知道我可以在末尾使用带有 "RETURNING pkey" 的手工查询,但我不想使用 pg_query() 因为 pg_insert 会自动为您转义所有内容所以我想要改用它。

由于pgsql中没有id的概念(只有序列),可以使用下面的代码

SELECT currval(pg_get_serial_sequence(tablename, 'id'));

您可以将 pg_query_paramsRETURNING 子句一起使用,并使用参数来转义所有内容。

这个功能唯一的问题是,当出现错误时,您无法知道问题的真正原因。获得正确的错误消息意味着使用 pg_send_query_params with pg_get_result.

看到一个code example