2013-03-31 92 views
0

我想用Erlang和epgsql執行簡單的PostgreSQL查詢,如Erlang and PostgreSQL。但wnen發出以下代碼:通過pgsql(Erlang)連接到PostgreSQL

{ok, C} = pgsql:connect("localhost", 
         "postgres", 
         "nevermind", 
         [{database, "postgres"}]). 

我得到這個錯誤:

** exception error: no match of right hand side value 
       {error, 
        {authentication, 
         [{severity,'Ð\222Ð\220Ð\226Ð\235Ð\236'}, 
         {code,"28000"}, 
         {message, 
          [208,191,208,190,208,187,209,140,208,183,208, 
           190,208,178,208,176,209,130,208,181|...]}, 
         {file,"auth.c"}, 
         {line,302}, 
         {routine,"auth_failed"}]}} 

PostgreSQL的工作,我可以添加表到我的數據庫或做簡單的查詢。但我需要用Erlang來做。更重要的,我不能在列表中閱讀完整的錯誤消息:

[208,191,208,190,208,187,209,140,208,183,208,190,208,178,208,176,209,130,208,181|...] 
+0

錯誤消息告訴您,不是返回{ok,C},連接失敗並返回認證錯誤。到目前爲止,我無法幫到你,但你應該看看連接參數和認證數據。如果你有源代碼,也許你可以通過閱讀302行附近的文件auth.c獲得更多的信息。 – Pascal

+0

這是一個PostgreSQL錯誤28000 INVALID AUTHORIZATION SPECIFICATION。你確定你提供了正確的用戶名嗎? – Vinod

+0

我認爲第三個參數必須是用戶名,但在教程中第三個參數是密碼。那麼第二個參數是什麼? –

回答

1

我安裝egpsql,做了一個直接的測試,並確認爲connect第二個參數是用戶名,第三個是密碼:

{ok, C} = pgsql:connect("localhost", "username", "password", [{database, "db_name"}]). 
{ok, Columns, Rows} = pgsql:squery(C, "select * from myschema.mytable"). 
+0

我想我的PostgreSQL中沒有正確的用戶。我可以用一個客戶端與用戶「postgres」一起工作,但其他客戶端會拋出類似auth-error(錯誤密碼或?)的內容。也許你知道如何正確的方式來添加用戶? –

+0

可以使用[create user](http://www.postgresql.org/docs/9.1/static/sql-createuser.html)SQL命令創建Postgres用戶帳戶和密碼。可以使用[grant](http://www.postgresql.org/docs/9.1/static/sql-grant.html)命令爲該帳戶授予權限。但是,還有其他因素會影響用戶的身份驗證能力。 –