2013-03-31 106 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)命令为该帐户授予权限。但是,还有其他因素会影响用户的身份验证能力。 –