尝试使用jdbc从clojure连接到postgresql时,密码身份验证失败

时间:2014-04-06 19:47:42

标签: postgresql jdbc clojure

我正在学习Clojure中的Web开发,我不是PostgreSQL或JDBC的专家。

我正在阅读“使用Clojure进行Web开发”一书,因为我无法连接到PostgreSQL数据库而陷入困境,尽管我相信我已经一步一步地遵循了本教程。

我用

连接到psql
sudo -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。

有人可以向我解释我在这里做错了什么吗? 提前谢谢!

2 个答案:

答案 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服务器错误日志,因为它们可能包含有关身份验证失败性质的更多详细信息。