The changeset returned by Repo.insert
does not include db-generated non primary field, in my case I defined an auto-increment field with type integer in schema:
schema "link" do
field :sequence, :integer, read_after_write: true
field :url, :string
field :code, :string
timestamps()
end
and make it a bigserial in migration:
def change do
create table(:link, primary_key: false) do
add :id, :binary_id, primary_key: true
add :sequence, :bigserial, null: false
add :url, :string
add :code, :string
timestamps()
end
end
sequence
accessed in a transaction
Ecto.Multi.new()
|> Ecto.Multi.insert(
:link,
Link.changeset(%Link{}, attrs)
)
|> Ecto.Multi.run(
:update,
fn repo, %{link: link} ->
link
|> Ecto.Changeset.change(code: generate(link.sequence))
|> repo.update()
end
)
|> Repo.transaction()
I tried :read_after_writes
option mentioned in this issue , not work for me, any suggestion?
postgresql as db