EnterpriseDB.com向社区提供的Postgres 安装程序通常会在macOSpostgres
上创建一个用户帐户。
在Terminal.app的控制台会话中,我需要切换到该用户。我的目标是使用该用户的权限运行文本编辑器,以便我可以编辑pg_hba.conf
控制 Postgres 用户身份验证规则的文件。
当我尝试:
su - postgres
…我被提示输入用户密码,我输入成功,但收到错误消息:
苏:对不起
我确定密码是正确的。我可以做些什么来访问postgres
用户?
sudo su postgres
在 Stack Overflow 上找到了这个已关闭的问题及其副本后,我将在此处发布在那里和那里找到的解决方案。
➥ 您必须将
sudo
命令与命令结合su
使用。出现提示时,输入您的macOS 管理员用户密码,而不是
postgres
用户密码。此时,您的 Mac 管理员用户是执行sudo
命令的用户,而不是postgres
用户。虽然我不明白为什么我们必须将 与 结合起来
sudo
,但它在macOS Mojavesu
中确实对我有用。在我的各种 BSD 和 Linux 相关搜索工作中,我没有找到这个提示,所以这可能是一个仅限 Mac 的 Apple 东西,也许是一种额外的安全措施。或者也许在 Unix 风格的操作系统中,该命令必须由用户运行,而在 macOS 中,出于安全考虑,该帐户默认禁用 - 我们的 Mac 管理员用户帐户功能不如,并且默认情况下可能未授权运行? 不知道,不在乎,解决方法有效。su
root
root
root
su
现代替代品:
sudo -u
根据Craig Ringer和Erwin Brandstetter的说法,更现代的形式是:
根据此页面:
-u
意思是“以这个指定的用户运行一个指定的命令”。postgres
正在指定我们要在其下运行命令的用户名。-i
模拟初始登录,这意味着 shell 将在运行该用户的启动脚本时进行初始化。有关旧方法和新方法的更多讨论,请参阅姐妹网站上的这个问题,sudo su - postgres 和 sudo -u postgres 有什么区别?. Craig Ringer 的答案建议:(a)忘记
sudo su
,并且(b)sudo -u
改用。postgres
以用户身份运行应用程序以用户身份运行
psql
会话postgres
:以用户身份运行文本编辑器应用程序:
nano
postgres
EBD 安装程序在安装过程中要求输入密码,但它是为数据库用户而不是
postgres
Unix 用户设计的,Unix 用户没有密码。这在 EDB 网站上的Postgres、密码和安装程序中有所提及。引用:
对您来说,最合理的解释
su - postgres
是您将数据库密码与操作系统密码混淆了。为了使其
su - postgres
可用,首先需要设置操作系统密码,这可以通过以下方式完成:这对于打包在 Linux 发行版中的 PostgreSQL 也是如此。事实上,用于 Linux 的 PostgreSQL 软件包甚至更进一步,并且不需要数据库超级用户的密码,这允许完全自动化的安装。就像如果
sudo
始终使用操作系统密码就不需要一样,如果用户只使用默认peer
身份验证方法,则不需要数据库密码postgres
。