我想在Erlang中访问PostgreSQL数据库。我下载了epgsql驱动程序,它是一些目录和文件,但我不明白如何使用它。
如何编写Erlang程序并使用epgsql驱动程序访问PostgreSQL数据库?
我制作了一个新文件夹,并将驱动程序src/
中的所有文件和pgsql.hrl
复制到我的新文件夹中。然后我创建了一个简单的测试程序:
-module(dbtest).
-export([dbquery/0]).
dbquery() ->
{ok,C} = pgsql:connect("localhost", "postgres", "mypassword",
[{database, "mydatabase"}]),
{ok, Cols, Rows} = pgsql:equery(C, "select * from mytable").
然后我开始使用c(pgsql).
和c(dbtest)
编译模块。
但是当我执行dbtest:dbquery().
时,我收到了这个错误:
** exception error: undefined function pgsql:connect/4
in function dbtest:dbquery/0
有关如何使用Erlang连接到PostgreSQL数据库的任何建议吗?
答案 0 :(得分:6)
Rebar是一个很好用的工具,但是我发现知道如何构建项目很好,这样你就可以在出现问题时告诉你该怎么做。尝试像这样组织你的项目:
/deps/epqsql/
/src/dbtest.erl
/ebin
然后cd进入deps/epqsql
并运行make
来构建库。
您的dbtest.erl
文件也应明确引用该库,将其添加到顶部附近:
-include_lib("deps/epgsql/include/pgsql.hrl").
您可能希望在进行更改时使用编译代码的Makefile(或rebar),但是,请尝试现在编译:{{1}}。
进行测试时,请确保正确设置了加载路径,请尝试:erlc -I deps/epqsql/ebin -o ebin src/dbtest.erl
。当erl控制台加载时,请尝试erl -pz deps/epqsql/ebin/ ebin/
,看看会发生什么!
我的机器上没有Postgresql设置但是,我能够通过此设置获得更合理的错误。
答案 1 :(得分:-3)
我建议使用ejabber pgsql驱动程序https://svn.process-one.net/ejabberd-modules/pgsql/trunk/