要解决的问题
数据库中存储的行数超过了
serial
类型所能容纳的数量, 因此需要采用bigserial
类型的整数作为主键serial
的取值范围为:1 到 2147483647
bigserial
的取值范围为:1 到 9223372036854775807
完整的 Postgresql 字段的数据类型, 可以参考这里
迁移脚本
defmodule ElectricProto.Repo.Migrations.AddStationTable do
use Ecto.Migration
def up do
create table(:station, primary_key: false) do
add :id, :bigserial, primary_key: true
timestamps
end
end
def down do
drop table(:station)
end
end
要点
create table
的参数primary_key
要设置为false
,通过
add
宏指定主键列id
, 类型为bigserial
模型的声明
@primary_key {:id, :id, autogenerate: true}
schema "station" do
field :area, :string, default: ""
field :carrier, :string, default: ""
field :city, :string, default: ""
field :deployed, :boolean, default: false
field :description, :string, default: ""
field :device_auth, :string, default: ""
field :device_type, :string, default: ""
field :geolocation, :string, default: ""
field :ip_addr, :string, default: ""
field :qrcode, :string, default: ""
field :station_id, :string, default: ""
field :status, :string, default: ""
timestamps
end
要点
主键要声明为
:id
类型,@primary_key {:id, :id, autogenerate: true}
完!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。