elixir - 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
解决方案
这在文档或其他指南中并不明显。诀窍在于字段的: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
推荐阅读
- css - 为什么 Boostrap 4.4.1 媒体查询不起作用?
- python - 未找到添加到 virtualenv 'activate' 脚本的环境变量(mac)
- javascript - InfiniteCalendar 中 onSelect 的事件处理程序
- angularjs - 使用 AngularJS 在模态对话框中使用模板
- node.js - 在 linux 上运行 nfc-pcsc 示例不会触发任何事件
- colors - 如何更改拾轮器线条的颜色和粗细?(斯威夫特用户界面)
- android - 如何在没有 IV(初始化向量)的情况下使用 Cipher
- php - 如何在 php 的 preg_match_all() 中添加印地语字符搜索?
- arrays - 字节数组的算术运算
- typescript - 使用 Vue + Typescript 和 Vue 组件时的类型推断