我正在尝试哈希我在数据库中插入的每本书的当前ID,以便每本书都能被这些“代码”识别。
Ecto中是否有办法在变更集或Ecto.insert()中显示fragment("nextval('books_id_seq')")
的值?
到目前为止,我所能做的就是从这个函数调用它来获取最后一个id:
...
def get_currval() do
from(b in Book,
select: fragment("nextval('books_id_seq')"),
limit: 1
)
|> Repo.one
end
我希望有更可靠的东西,比如插入查询中的片段。
答案 0 :(得分:0)
有一种方法可以在同一个查询中获取ID:RETURNING,允许您
# \d+ tmp_play
Table "pg_temp_11.tmp_play"
Column | Type | Modifiers | Storage | Stats target | Description
--------+-----------------------+-------------------------------------------------------+----------+--------------+-------------
id | integer | not null default nextval('tmp_play_id_seq'::regclass) | plain | |
name | character varying(32) | | extended | |
Indexes:
"tmp_play_pkey" PRIMARY KEY, btree (id)
# INSERT INTO tmp_play (name) VALUES ('Hello') RETURNING id;
id
----
1
(1 row)
INSERT 0 1
# INSERT INTO tmp_play (name) VALUES ('world') RETURNING id;
id
----
2
(1 row)
INSERT 0 1