Postgrex プロジェクト ページでは、拡張機能を使用してデータベースからの型をエンコード/デコードする機能について言及しています https://github.com/ericmj/postgrex#extensions
プロジェクトページからコードを取得してマップを返そうとしていますが、拡張機能が Postgrex にフックする場所がわかりません。問題がある場合は、Phoenix Web アプリでそうしようとしています:
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\"}"}]}