首页 > 解决方案 > Elixir Ecto 自定义主键

问题描述

我正在尝试将主键从 重命名:id:account_id

我有以下Schema和迁移。当我尝试插入记录时,我在 account_id 列上从 Postgres 收到“不能为空”错误。

我是否正确设置了自动生成位?我觉得应该在迁移中。

  def change do
    create table(:accounts) do
      add :account_id, :integer, primary_key: true
      add :email, :string
      timestamps()
    end
  end


  @primary_key {:account_id, :id, autogenerate: true}
  schema "accounts" do
    field :email, :string
    timestamps()
  end

标签: elixirecto

解决方案


这在文档或其他指南中并不明显。诀窍在于字段的:bigserial类型。:id

  def change do
    create table(:accounts, primary_key: false) do
      add :account_id, :bigserial, primary_key: true
      add :email, :string
      timestamps()
    end
  end

推荐阅读