我正在使用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的方式)。