【问题标题】:Elixir Postgrex using uuid使用 uuid 的 Elixir Postgrex
【发布时间】:2018-11-07 15:53:12
【问题描述】:

我正在为我的数据库使用 Postgrex 库,但我遇到以下问题:数据库中的一列是 uuid 类型。我在 elixir 中使用 UUID 模块,但每当我尝试将某些内容保存到数据库时,我都会收到以下错误:Postgrex expected a binary of 16 bytes, got "3c5fda26-ea3b-4c77-8f19-06e106a61eda"。我试图将其存储为 一个纯字符串,但正如您所见,这是不可能的。在将 uuid 持久化到数据库之前,我应该如何转换它?

【问题讨论】:

  • 您能提供一个用于持久化记录的命令吗?

标签: elixir


【解决方案1】:

我刚刚发现 UUID 模块已经有一个名为 UUID.string_to_binary! 的函数,最好使用这个而不是 Ecto,因为我根本没有使用 Ecto

【讨论】:

    【解决方案2】:

    UUID 是一个字符串,但不是“人类可读的字符串”。你看到的3c5fda26-ea3b-4c77-8f19-06e106a61eda不是 UUID,它只是可能的人类可读表示之一。你需要的是传递直接的、内部的、UUID 表示,它实际上是 16 字节的二进制。要将字符串从十六进制表示解析为二进制表示,您可以使用Ecto.UUID.dump/1

    【讨论】:

      【解决方案3】:

      在架构中将字段的类型设置为binary_id

      例如:

      @primary_key {:id, :binary_id, autogenerate: true}
      @derive {Phoenix.Param, key: :id}
      schema “companies” do
       field :name, :string
       field :mission_statement, :string
      
       has_many :managers, EctoUuid.Manager
       timestamps
      end
      

      【讨论】:

        猜你喜欢
        • 2015-01-24
        • 1970-01-01
        • 2019-05-06
        • 2021-05-18
        • 1970-01-01
        • 2021-01-08
        • 1970-01-01
        • 1970-01-01
        • 2015-12-08
        相关资源
        最近更新 更多