【问题标题】:a bash script to change postgresql user password用于更改 postgresql 用户密码的 bash 脚本
【发布时间】:2013-04-09 14:05:43
【问题描述】:

我可以这样修改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;

谁能告诉我如何使用一行命令来做到这一点?

【问题讨论】:

  • 我实际上认为这是迁移到 superuser.com 的题外话。 真的让我感到恼火的是,Stack Overflow 在我投票迁移它时将我的名字作为一个密切投票的人,因为它“不是一个真正的问题”。
  • 那就投票重开吧!

标签: bash postgresql shell command


【解决方案1】:

如果你使用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';\""

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

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

【讨论】:

  • 我用它作为资源来尝试自动配置 uuid 扩展,但遇到了我不太明白的问题。我正在使用的 su 命令是 su - postgres -c "psql -d template1 -c \"CREATE EXTENSION \"uuid-ossp\";\"",但是如果您在 psql shell 中使用该命令且未引用 uuid-ossp,我会遇到类似的语法错误。我以为我已经充分地逃避了我的报价。有什么想法吗?
  • 已结束创建 Here 文档,但仍很想知道如何以单行方式执行此操作..
  • @markdsievers 使用sudo。它更加理智,因为它不需要额外的引用层。 sudo -u postgres psql -d template1 -c "..."
  • 如果它可以帮助任何对此有问题并在用户名中使用破折号等字符的人:sudo -u postgres psql -c "alter user \"username-with-dash\" with password 'password-with-dash';"
  • 你是救生员! :)
猜你喜欢
  • 1970-01-01
  • 2014-07-07
  • 2012-09-25
  • 1970-01-01
  • 2020-05-29
  • 2017-07-02
  • 1970-01-01
  • 2019-11-02
  • 2015-09-27
相关资源
最近更新 更多