关于使用 Ecto 预填充 PostgreSQL Table 的建议

Advice on Pre-Populating PostgreSQL Table with Ecto

TL;DR 使用 Ecto 时,我应该在哪里(在代码中)加载数据以在创建后预填充一个小 table?

我正在学习 Elixir、Phoenix 和 Ecto。我的架构中有一个 table 来定义可配置选项列表。我想在创建 table 时使用最少的一组选项预填充此 table。

在我看来 _create_table.exs 脚本是执行此操作的地方,因为那是创建 table 的地方。我正在查看一个 execute{} 块,但它看起来很笨拙。

代码中是否有更好的地方来完成预填充新 table?

Phoenix 中,填充数据库的常用方法是使用 priv/repo/seeds.exs 它通过 mix run 任务生成:

mix run priv/repo/seeds.exs

但这种方法实际上适用于任何 Ecto 项目。只需创建文件,将种子代码放在那里,然后将 mix.exs aliases 部分更新为

defp aliases do
  [
    "ecto.setup": [
      "ecto.create",
      "ecto.migrate",
      "run priv/repo/seeds.exs"
    ],
    ...
  ]

现在mix ecto.setup将创建、迁移、填写数据库。