postgresql - 如何在 Ecto 中使用 Postgres 的枚举类型

标签 postgresql enums elixir ecto

使用 PostgreSQL,我们可以做这样的事情:

CREATE TYPE order_status AS ENUM ('placed','shipping','delivered')

来自 Ecto's official doc , 没有本地类型来映射 Postgres 的枚举类型。这module为枚举结构提供自定义类型,但它映射到数据库中的整数。我可以轻松地使用该库,但我更喜欢使用数据库附带的 native 枚举类型。

Ecto 还提供了一种创建 custom types 的方法,但据我所知,自定义类型必须映射到 native Ecto 类型...

有人知道这是否可以在 Ecto 的模式中完成吗?如果是,迁移将如何进行?

最佳答案

也许我做错了什么,但我只是像这样创建了类型和字段:

# creating the database type
execute("create type post_status as enum ('published', 'editing')")

# creating a table with the column
create table(:posts) do
  add :post_status, :post_status, null: false
end

然后将字段设为字符串:

field :post_status, :string

它似乎有效。

关于postgresql - 如何在 Ecto 中使用 Postgres 的枚举类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35245859/

相关文章:

postgresql - 如何在PostgreSQL的where子句中写rownum

java - 字符串或枚举作为参数来引用模型字段

SQL查询: IN vs equal

ruby-on-rails - 使用 Rails 的 uniq 方法时出现 Postgresql 错误

c++ - 将 C 枚举导入 C++ 命名空间

elixir - Elixir 是否支持自省(introspection)以显示函数起源?

elixir - 如何从测试覆盖率分析中排除特定文件?

ssl - Cloudflare SSL 不适用于 Elixir/Phoenix 后端

sql - 如何在postgresql中对重叠数据进行汇总?

java - 从代码访问XML枚举值