嗯...
如果您可以使用 pgAdminIII 中的用户名和密码进行连接,但无法使用 psql 进行连接,那么这两个程序可能连接到数据库的方式不同。
[如果您要连接到不同的数据库,请先尝试连接到同一个数据库。见下文。]
来自PostgreSQL: Documentation: 9.3: psql:
如果您省略主机名,psql 将通过 Unix 域套接字连接到本地主机上的服务器,或通过 TCP/IP 连接到没有 Unix 域套接字的机器上的 localhost。
如果您没有运行 psql ... -h host_name ... 之类的东西,而您运行的是 Ubuntu,则 psql 应该通过 Unix 域套接字进行连接,因此 PostgreSQL 可能未配置为允许其中一种密码身份验证方法postgres 用户。
你可以通过运行来测试:
sudo -u postgres psql
如果上述方法有效,您的服务器可能已配置为 postgres 用户对本地连接使用 peer 身份验证,即向操作系统询问您的用户名以确认你是postgres。
所以它可能是你的 pg_hba.conf 文件
文件的完整路径类似于 /etc/postgresql/9.3/main/pg_hba.conf。您可以通过例如查看它sudo cat /etc/postgresql/9.3/main/pg_hba.conf | more.
如果您在 psql 命令中省略了主机名,那么如果您将以下条目添加到您的 pg_hba.conf 文件中,您应该能够连接:
# Connection type Database User IP addresses Method
local all postgres md5
[pg_hba.conf 文件中的注释行以# 开头。]
如果您正在在psql 命令中包含主机名,请改为添加此条目:
# Connection type Database User IP addresses Method
host all postgres 127.0.0.1/32 md5
您需要在通过psql 为您的连接匹配任何其他条目之前输入该条目。如果对放置位置有疑问,只需将其放在第一个未注释行之前。
更多关于 pg_hba.conf
来自PostgreSQL: Documentation: 9.3: The pg_hba.conf File[粗体强调我的]:
与连接类型、客户端地址、请求的数据库和用户名匹配的第一条记录是用于执行身份验证。没有“fall-through”或“backup”:如果选择了一条记录并且认证失败,则不考虑后续记录。如果没有记录匹配,则拒绝访问。
请注意,记录在身份验证方法上不匹配。因此,如果您的 pg_hba.conf 文件包含以下条目:
# Connection type Database User IP addresses Method
local all postgres peer
那么您将无法通过以下方式连接:
psql -u postgres
除非这些条目之一在您的 pg_hba.conf 文件中高于前一个条目:
# Connection type Database User IP addresses Method
local all postgres md5
local all postgres password # Unencrypted!
local all all md5
local all all password # Unencrypted!