Ale*_*Nil 3 postgresql elixir ecto phoenix-framework
我有一个像这样的 Ecto 模式:
schema "quotes" do
field :quote, :string
field :tags, {:array, :string}
timestamps()
end
Run Code Online (Sandbox Code Playgroud)
在相应的迁移中有:
create table(:quotes) do
add :quote, :string, size: 145
add :tags, {:array, :string}
timestamps()
end
Run Code Online (Sandbox Code Playgroud)
我希望每个标签的tags最大大小为 140。如何在迁移中指定此约束?我的目标是在生成的 PostgreSQL 表中包含一个数组,varchar(140)而不是更“宽敞”的默认值(255?)。
add接受任何原子作为列类型并将其按原样传递给适配器,并且 PostgreSQL 适配器按原样将未知类型发送到数据库,这意味着我们可以指定确切的类型,即作为 的varchar(140)第二个元素{:array, _},它只需要是一个原子。
add :tags, {:array, :"varchar(140)"}
Run Code Online (Sandbox Code Playgroud)
我已经对此进行了测试,并且正确运行迁移会创建所需类型的列。
my_app_dev=# \d posts
Table "public.posts"
Column | Type | Modifiers
----------+--------------------------+---------------------------------------------------
...
tags | character varying(140)[] |
Run Code Online (Sandbox Code Playgroud)
无需更改 中的任何内容schema。那里的类型应该保留{:array, :string}。
| 归档时间: |
|
| 查看次数: |
1495 次 |
| 最近记录: |