Symfoware

Symfowareについての考察blog

elixirからepgsqlを使用して、PostgreSQLに接続する

elixirからPostgreSQLに接続しています。
OSはFreeBSD 10.1
PostgreSQL 9.4.4
elixir 1.0.5

こんな環境です。


postgrex



最初、postgrexというライブラリを使おうと思ったのですが、
https://github.com/ericmj/postgrex

どうしてもエラーが消せず、諦めました。


17:38:12.237 [error] GenServer #PID<0.61.0> terminating
Last message: {:tcp, #Port<0.2294>,...
State: %{backend_key: nil, bootstrap: false, extensions: [{Postgrex.Extensions.Binary, nil}, H...
** (exit) an exception was raised:
    ** (ErlangError) erlang error: {:noproc, {GenServer, :call, ...
        (elixir) lib/gen_server.ex:356: GenServer.call/3
        lib/postgrex/protocol.ex:34: Postgrex.Protocol.bootstrap/1
        lib/postgrex/connection.ex:417: Postgrex.Connection.new_data/2
        lib/postgrex/connection.ex:292: Postgrex.Connection.handle_info/2
        (stdlib) gen_server.erl:615: :gen_server.try_dispatch/4
        (stdlib) gen_server.erl:681: :gen_server.handle_msg/5
        (stdlib) proc_lib.erl:239: :proc_lib.init_p_do_apply/3







epgsql



https://github.com/epgsql/epgsql

Erlang用のドライバーですが、elixirからも使用できます。
FreeBSDだと、パッケージが用意されていました。


# pkg search epgsql
erlang-epgsql-3.1.0_2




pkg installでインストールしています。


# pkg install erlang-epgsql







サンプル



サンプルはこんな感じになりました。

接続パラメーターを文字列ではなく、String.to_char_listで、
変換してから指定するのがポイントです。


  1. # データベース接続開始
  2. {:ok, pid} = :epgsqla.start_link()
  3. IO.inspect :epgsqla.connect(pid,
  4.     String.to_char_list("localhost"),
  5.     String.to_char_list("pgadmin"),
  6.     String.to_char_list("P@ssw0rd"),
  7.     [{:database, String.to_char_list("sample")}]
  8. )
  9. # 削除クエリー
  10. {:ok, _} = :epgsql.squery(pid, "delete from test")
  11. # 登録クエリー
  12. {:ok, _} = :epgsql.squery(pid, "insert into test(id, name) values (1, 'test')")
  13. {:ok, _} = :epgsql.squery(pid, "insert into test(id, name) values (2, '日本語テスト')")
  14. # 検索して結果を表示
  15. {:ok, field_info, rows} = :epgsql.squery(pid, "select id,name from test")
  16. Enum.each(rows, fn(row) ->
  17.     {id, name} = row
  18.     IO.puts "id:#{id}, name:#{name}"
  19. end)
  20. # 接続を閉じる
  21. :epgsql.close(pid)




実行結果


# elixir sample.exs
sample.exs:20: warning: variable field_info is unused
#Reference<0.0.1.76>
id:1, name:test
id:2, name:日本語テスト


関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/08/02(日) 18:33:47|
  2. Erlang
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Apache PDFBoxで日本語の出力とフォントの埋め込み | ホーム | elixir + cowboyでwebアプリ その6 画像のアップロードとpostの最大値変更>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1776-3e989150
この記事にトラックバックする(FC2ブログユーザー)