Postgrex项目页面提到了使用扩展来编码/解码来自db https://github.com/ericmj/postgrex#extensions的类型的功能

我正在尝试从项目页面获取代码以返回地图,但是我不确定扩展名应该挂接到Postgrex的位置,如果有关系,我正在尝试在Phoenix网络应用程序中这样做:

defmodule Extensions.JSON do
  alias Postgrex.TypeInfo

  @behaviour Postgrex.Extension

  def matching,
    do: [type: "json"]

  def format,
    do: :binary

  def encode(%TypeInfo{type: "json"}, map, _types),
    do: Poison.encode!(map)

  def decode(%TypeInfo{type: "json"}, json, _types),
    do: Poison.decode!(json)
end

#in iex
iex(5)> Ecto.Adapters.SQL.query Rocket.Repo, ~s(select '{"troy":"is cool"}'::json),[]
09:51:53.423 [debug] select '{"troy":"is cool"}'::json (1.3ms)
%{columns: ["json"], command: :select, num_rows: 1,
  rows: [{"{\"troy\":\"is cool\"}"}]}

最佳答案

首先,请确保您使用的是Postgrex的最新“主”版本。您可以通过指定mix.exs{:postgrex, git: "git://github.com/ericmj/postgrex.git"}中执行此操作

然后,您必须将扩展添加到连接选择中,如下所示:

{:ok, pid} = Postgrex.Connection.start_link(database: "postgres", extensions: [Extensions.JSON])

希望这可以帮助!

关于elixir - 如何使用Postrgrex扩展来处理JSON数据类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28241866/

10-11 03:01