我正在学习Clojure中的Web开发,我不是PostgreSQL或JDBC的专家。
我正在阅读“使用Clojure进行Web开发”一书,因为我无法连接到PostgreSQL数据库而陷入困境,尽管我相信我已经一步一步地遵循了本教程。
我用
连接到psqlsudo -u postgres psql
然后我创建了一个密码为“admin”的管理员用户
postgres=# CREATE USER admin WITH PASSWORD 'admin';
CREATE ROLE
然后我创建了一个名为reporting的数据库:
postgres=# CREATE DATABASE reporting OWNER admin;
CREATE DATABASE
到目前为止没有任何投诉。
然后从我的clojure代码中,我尝试连接到数据库并创建一个表:
(ns reporting-example.models.db
(:require [clojure.java.jdbc :as sql]))
;defining the db connection
(def db
{:subprotocol "postgresql"
:subname "//localhost/reporting"
:user "admin"
:password "admin"})
;function for creating an 'employee' table
(defn create-employee-table []
(sql/create-table :employee
[:name "varchar(50)"]
[:occupation "varchar(50)"]
[:place "varchar(50)"]
[:country "varchar(50)"])
)
; then trying to actually create the table, here's the part that breaks with an exception :
(sql/with-connection db
(create-employee-table))
我变丑了:
org.postgresql.util.PSQLException: FATAL: password authentication failed for user "admin"
这对我来说没有意义,凭据似乎很好。
我从逆时针REPL和Leiningen REPL尝试了上述代码。如果重要的话,我正在使用Ubuntu 13.10。
有人可以向我解释我在这里做错了什么吗? 提前谢谢!
答案 0 :(得分:4)
如果您还没有尝试过,请查看您的pg_hba.conf文件。它将被命名为
/etc/postgresql/9.6/main/pg_hba.conf
(Ubuntu 16.04)/var/lib/pgsql/9.3/data/pg_hba.conf
(Fedora 20); 您可能必须使用find / -name pg_hba.conf
找到它。
在文件底部,将METHOD
值更改为trust
以进行本地测试(有关完整信息,请参阅postgres文档)。重新启动postgres以确保所有内容都已清理干净并读取新的参数:
> sudo systemctl restart postgresql # ubuntu
希望这能够治愈你的困境。它解决了我在Ubuntu / Fedora上的问题。
答案 1 :(得分:3)
由于您无法使用相同的设置与psql
连接,因此实际上有三种可能性:
要检查后者,请连接您创建帐户,然后运行
show port;
确保它与您在应用中指定的内容相同。这并不完美 - 如果一个端口没有侦听TCP / IP并且具有不同的套接字目录,则两个pg实例可以共享一个端口 - 但这是一个很好的第一次测试。
您还应该检查PostgreSQL服务器错误日志,因为它们可能包含有关身份验证失败性质的更多详细信息。