25

我可以通过这种方式更改 postgresql 用户密码(2个步骤):

$ su - postgres -c 'psql -U postgres -d postgres'
# Alter user postgres with password 'password';

现在我想使用单行命令(1步)来更改密码,例如:

su - postgres -c 'psql -U postgres -d postgres -c "alter user postgres with password ''password'';"'

我听说使用双单引号来转义一个单引号,所以我添加了双引号'。但是显示错误消息:

ERROR:  syntax error at or near "password"
LINE 1: alter user postgres with password password;

有人可以让我知道如何使用一行命令来做到这一点吗?

4

1 回答 1

50

如果你使用更容易sudo

sudo -u postgres psql -U postgres -d postgres -c "alter user postgres with password 'password';"

但是 su 也可以,这应该有效:

su - postgres -c "psql -U postgres -d postgres -c \"alter user postgres with password 'password';\""

我使用了外部双引号并对内部双引号进行了转义,因此它们作为单个调用参数的一部分传递给shell,su并且不会被 shell 转义,因此实际的查询文本作为单个 arg 传递给 psql,包括单引号密码.

sudo 更容易做到这一点的原因之一是它使用一种更智能的方式来执行子进程,而不是运行第二个 shell 实例来执行它。您需要少一层 shell 元字符转义。

于 2013-04-17T04:17:39.253 回答