0

我正在尝试对我插入数据库中的每本书的当前 ID 进行哈希处理,以便每本书都能被这样的“代码”识别。

Ecto 中是否有一种方法可以显示fragment("nextval('books_id_seq')")变更集或 Ecto.insert() 中的值?

到目前为止,我所能做的就是通过从此函数调用它来获取最后一个 id:

...
  def get_currval() do
    from(b in Book,
      select: fragment("nextval('books_id_seq')"),
      limit: 1
    )
    |> Repo.one
  end

我希望有更可靠的东西,比如插入查询中的片段。

4

1 回答 1

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
于 2016-09-15T10:46:54.883 回答