如何通过CLI连接到PostgreSQL?

14

我正在尝试通过命令行访问PostgreSQL。但是,每当我需要输入密码时,我会收到以下错误消息:致命错误:用户RMehta的密码验证失败。我非常确定密码验证失败的原因是我的数据库用户是postgres,而不是RMehta。

我找到的唯一解决方案是在命令行中使用runas,但我无法弄清楚如何使runas正常工作。感谢您提供的任何建议。我正在使用Windows 7和PostgreSQL 9.3。


你能否发布你所发出的确切命令以及你得到的精确输出? - vyegorov
我尝试了很多方法,但最好的想法是使用RUNAS /USER:postgres命令。无论我尝试什么,输出都是RUNAS USAGE:然后是关于runas应该如何工作的大量信息。没有错误消息。我认为我的任何操作都没有被识别为命令。 - Ravi Mehta
看起来您提供了错误的用户名/密码或者您的 pg_hba.conf 配置不正确: http://stackoverflow.com/search?q=[postgresql]Fatal%3A+password+authentication+failed+for+user+ - user330315
3个回答

28

对于Unix环境,命令行为

psql -U USERNAME -h localhost dbname

对于 Windows 环境,您可以考虑将“-”替换为“/”。

-U 选项允许您选择要连接的用户。

-h 选项允许您使用 TCPIP 协议连接,对于 Windows 可能是无用的。


非常感谢!那真的帮了我很多。如果可以的话,我会点赞这条评论的。 - Ravi Mehta
不能 在 Windows 参数中用 / 替换 -(或 --)。 - user330315

3

首先确保您的用户具有sudo权限,如果没有,您可以使用以下命令将您的用户添加为sudo用户:

sudo adduser <username> sudo

改变将在用户下次登录时生效。
现在尝试运行以下命令:-
sudo -u postgres psql

如果出现错误,请按照以下步骤进行操作,它应该可以解决问题。
i) 现在转到sudo vim /etc/postgresql/<your_postgres_version>/main/pg_hba.conf文件,并查找以下行:
local   all             postgres                                md5 #peer

并对此发表评论。在该行正下方,必须有一行注释的内容,写着:

local   all             postgres                                peer

对于较旧版本,应该是:

local   all         postgres                          ident

取消该行的注释。

ii) 现在使用以下任何一个命令重新启动postgres:

sudo /etc/init.d/postgresql restart

或者

sudo service postgresql restart

iii) 现在您可以使用以下命令简单地登录到postgres:

sudo -u postgres psql

iv) 一旦您进入,您可以根据自己的需要创建任何操作,例如我要创建一个新数据库,您可以使用以下命令执行相同的操作:

CREATE DATABASE airflow_replica;

3

psql -h <hostname> -U <username> -d <dbname>

如果所有参数都正确,则会要求您输入先前输入的用户名的数据库密码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接