Postgrex, как определить библиотеку JSON

Я просто пытаюсь использовать Postgrex без какой-либо настройки ecto, так что просто пример из документации readme.

Вот как выглядит мой модуль:

defmodule Receive do

  def start(_type, _args) do
    {:ok, pid} = Postgrex.start_link(
      hostname: "localhost",
      username: "john",
      # password: "",
      database: "property_actions",
      extensions: [{Postgrex.Extensions.JSON}]
    )
    Postgrex.query!(
      pid,
      "INSERT INTO actions (search_terms) VALUES ($1)",
      [
        %{foo: 'bar'}
      ]
    )

  end
end

когда я запускаю код, я получаю

** (RuntimeError) type `json` can not be handled by the types module Postgrex.DefaultTypes, it must define a `:json` library in its options to support JSON types

Что-то я не правильно настраиваю? Из того, что я собрал в документации, мне даже не нужно иметь эту строку расширений, потому что json обрабатывается по умолчанию.

1 ответ

Решение

На Postgrex <= 0.13 вам нужно определить свои собственные типы:

Postgrex.Types.define(MyApp.PostgrexTypes, [], json: Poison)

а затем при запуске Postgrex:

Postgrex.start_link(types: MyApp.PostgrexTypes)

На Postgrex >= 0.14 (в настоящее время мастер) это было сделано проще:

config :postgrex, :json_library, Poison
Другие вопросы по тегам