如何访问插入时自动增量的当前行ID / primary_key?

时间:2016-09-01 13:32:05

标签: sql postgresql

我正在使用Postgres 9.5.0

所以我想创建一个祖先列。它应该是父级的祖先列,加上当前行的id。

id | parent_id | ancestry
1 | nil | "/1/"
2 | 1 | "/1/2/"
3 | 2 | "/1/2/3/"
4 | nil | "/4/"

我已尝试currval('messages_id_seq')返回currval of sequence "messages_id_seq" is not yet defined in this session

我试过nextval('messages_id_seq') - 1哪个有效,但看起来不可靠(可能会遇到竞争条件?)

我看到了一个使用

的例子
INSERT INTO "messages" ("id" "body" ...)
VALUES (default $1 ...)
RETURNING "id" ["Message body" ...]

我使用的是数据库抽象框架(Ecto,类似ORM,但不是),它生成以下SQL。这使得尝试实现上述SQL变得很麻烦。

INSERT INTO "messages" ("body" ... )
VALUES ($1 ...)
RETURNING "id" ["Message body" ...]

有没有干净的选择? Ecto允许fragment默认值(这是我做currval / nextval的方式)。

0 个答案:

没有答案