114

在 Ubuntu 中,我安装了 PostgreSQL 数据库并为服务器创建了一个超级用户。

如果我忘记了 postgresql 超级用户的密码,我该如何为该用户重置它(密码)?

我尝试卸载它,然后再次安装,但保留了之前创建的超级用户。

4

1 回答 1

260

假设您是机器的管理员,Ubuntu 已授予您sudo以任何用户身份运行任何命令的权利。
还假设您没有限制pg_hba.conf文件(在/etc/postgresql/9.1/main目录中)的权限,它应该包含这一行作为第一条规则:

# Database administrative login by Unix domain socket  
local   all             postgres                                peer

(关于文件位置:9.1是主要的 postgres 版本和main您的“集群”的名称。如果使用更新版本的 postgres 或非默认名称,则会有所不同。使用pg_lsclusters命令获取您的版本/系统的此信息)。

无论如何,如果pg_hba.conf文件没有该行,请编辑文件,添加它,然后使用sudo service postgresql reload.

然后您应该能够psql使用以下 shell 命令以 postgres 超级用户身份登录:

sudo -u postgres psql

进入 psql 后,发出 SQL 命令:

ALTER USER postgres PASSWORD 'newpassword';

在此命令中,postgres是超级用户的名称。如果忘记密码的用户是ritesh,则命令为:

ALTER USER ritesh PASSWORD 'newpassword';

参考:PostgreSQL 9.1.13 文档,第 19 章。客户端身份验证

请记住,您需要在最后键入带有单个Spostgres

如果在命令历史记录或服务器日志中以明文形式留下密码是一个问题,psql 提供了一个交互式元命令来避免这种情况,作为替代ALTER USER ... PASSWORD

\password username

它通过双盲输入请求密码,然后根据设置对其进行哈希处理,并使用密码的哈希版本而不是明文版本向服务器password_encryption发出命令。ALTER USER

于 2013-01-29T17:15:58.373 回答