我有一个像这样的Ecto架构:
schema "quotes" do
field :quote, :string
field :tags, {:array, :string}
timestamps()
end
在相应的迁移中有:
create table(:quotes) do
add :quote, :string, size: 145
add :tags, {:array, :string}
timestamps()
end
我希望tags
中的每个标记的最大大小为140.如何在迁移中指定此约束?我的目标是在生成的PostgreSQL表中有一个varchar(140)
数组,而不是更多'spacy'默认值(255?)。
答案 0 :(得分:3)
add
接受任何原子作为列类型并按原样将其传递给适配器,PostgreSQL适配器按原样将未知类型发送到数据库,这意味着我们可以指定确切的类型,即{{ 1}}作为varchar(140)
的第二个元素,它只需要是一个原子。
{:array, _}
我已对此进行了测试,并且正确运行迁移会创建所需类型的列。
add :tags, {:array, :"varchar(140)"}
无需更改my_app_dev=# \d posts
Table "public.posts"
Column | Type | Modifiers
----------+--------------------------+---------------------------------------------------
...
tags | character varying(140)[] |
中的任何内容。那里的类型应该保留schema
。