2

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\"}"}]}
4

1 に答える 1

5

まず、Postgrex の最新の「マスター」バージョンを使用していることを確認してください。mix.exs指定することでこれを行うことができます{:postgrex, git: "git://github.com/ericmj/postgrex.git"}

次に、次のように拡張機能を接続オプションに追加する必要があります。

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

お役に立てれば!

于 2015-01-30T19:29:49.483 に答える