1

erlang と epgsql を使用して単純な PostgreSQL クエリを実行しようとしています。

そうです:

{ok, C} = pgsql:connect("localhost", "shk", "qwerty", [{database, "mydb"}]).
>> {ok,<0.34.0>}

それで:

{ok, Cols, Rows} = pgsql:squery(C, "select * from users").

しかし、私はエラーが発生しました:

=ERROR REPORT==== 27-Apr-2012::17:58:23 ===
** State machine <0.34.0> terminating 
** Last message in was {'EXIT',<0.32.0>,
                        {{badmatch,
                          {error,
                           {error,'ð\236ð¨ð\230ð\221ð\232ð\220',<<"42P01">>,
                            <<208,190,209,130,208,189,208,190,209,136,208,181,
                              208,189,208,184,208,181,32,34,109,121,100,98,34,
                              32,208,189,208,181,32,209,129,209,131,209,137,
                              208,181,209,129,209,130,208,178,209,131,208,181,
                              209,130>>,
                            [{position,<<"15">>}]}}},
                         [{erl_eval,expr,3}]}}
** When State == ready
**      Data  == {state,undefined,<0.35.0>,5000,
                        [{<<"application_name">>,<<>>},
                         {<<"client_encoding">>,<<"UTF8">>},
                         {<<"DateStyle">>,<<"ISO, DMY">>},
                         {<<"integer_datetimes">>,<<"on">>},
                         {<<"IntervalStyle">>,<<"postgres">>},
                         {<<"is_superuser">>,<<"off">>},
                         {<<"server_encoding">>,<<"UTF8">>},
                         {<<"server_version">>,<<"9.0.7">>},
                         {<<"session_authorization">>,<<"shk">>},
                         {<<"standard_conforming_strings">>,<<"off">>},
                         {<<"TimeZone">>,<<"posixrules">>}],
                        undefined,undefined,undefined,
                        {30932,488494147},
                        {statement,undefined,undefined,undefined},
                        73}
** Reason for termination = 
** {{badmatch,{error,{error,'ð\236ð¨ð\230ð\221ð\232ð\220',<<"42P01">>,
                            <<208,190,209,130,208,189,208,190,209,136,208,181,
                              208,189,208,184,208,181,32,34,109,121,100,98,34,
                              32,208,189,208,181,32,209,129,209,131,209,137,
                              208,181,209,129,209,130,208,178,209,131,208,181,
                              209,130>>,
                            [{position,<<"15">>}]}}},
    [{erl_eval,expr,3}]}

どうしたの?どうすれば修正できますか?

ありがとうございました。

4

3 に答える 3

4

文字を認識すると、エラー文字列はロシア語のようです。

応答を表示するには、次のコマンドを使用できます。

io:format("~ts",[<<208,190,209,130,208,189,208,190,209,136,208,181,
                   208,189,208,184,208,181,32,34,109,121,100,98,34,
                   32,208,189,208,181,32,209,129,209,131,209,137,
                   208,181,209,129,209,130,208,178,209,131,208,181,
                   209,130>>]).
отношение "mydb" не существует

簡単な Google 翻訳では、データベース mydb が存在しないか、それを使用する権限がないと思われます。

于 2012-04-27T21:10:24.877 に答える
2

epgsqlドキュメントから:

エラー

PostgreSQLバックエンドで発生したエラーは{error、#error{}}として返されます。レコードの定義についてはpgsql.hrlを参照してください。epgsql関数は、次のいずれかである{error、What}を返す場合もあります。

{unsupported_auth_method、Method}-必要な認証メソッドはサポートされていないタイムアウト-リクエストがタイムアウトしました-接続が閉じられましたsync_required-エラーが発生し、pgsql:syncを呼び出す必要があります

pgsql.hrlをインクルードし、エラーをキャプチャしてエラーメッセージを出力してみてください。これにより、正しい方向を示すことができます。

于 2012-04-27T13:33:45.917 に答える
2

簡単にやってみる

Response = pgsql:squery(C, "select * from mydb"), 
io:format("~p~n",[Response]).

そして、彼がサーバーから何を返しているかを確認してください。タイプミスがあるか、テーブルが存在しないなどの可能性があります。

これもチェックしてください http://www.erlangatwork.com/2009/01/erlang-and-postgresql.html

于 2012-04-27T13:13:35.940 に答える