我正在学习Clojure的Web开发,对于PostgreSQL和JDBC都不是专家。
我正在阅读《Clojure Web开发》这本书,但遇到了麻烦,因为我无法连接到PostgreSQL数据库,尽管我认为我已经按照教程一步步操作了。
我使用以下命令连接到psql:
sudo -u postgres psql
然后我创建了一个名为'admin'的管理员用户,并设置密码为'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"
我觉得这不合理,凭证看起来没问题。
我在Counterclockwise REPL和Leiningen REPL中尝试了上述代码。我正在使用Ubuntu 13.10,如果有影响的话。
能有人解释一下我在这里做错了什么吗?谢谢!
psql
吗?例如:在提示符处输入psql -h localhost -U admin
并输入密码。我的第一个猜测是,你可能有两个不同端口监听的 PostgreSQL 安装,并且你在不同的端口上创建了用户,而你正在使用 Clojure 连接到另一个端口。 - Craig Ringer