按照此处的教程:http://www.unixmen.com/install-postgresql-9-4-phppgadmin-ubuntu-14-10/
我正在用 bash 编写 PostgreSQL 的安装脚本,但是在设置初始用户密码时遇到问题。
按照本部分的教程,我们有:
# Login to postgresql prompt:
sudo -u postgres psql postgres
# .. and set postgres password with following command:
postgres=# \password postgres
Enter new password:
Enter it again:
postgres=# \q
这很好,但我想从 Bash 脚本中设置此密码,并且此类任务通常可以使用 Expect 来完成:
# Build the command into a variable so that we can run it later
PSQL_QUERY=$(expect -c "
set timeout 10
spawn -u postgres psql postgres -c '\\\password postgres'
expect \"Enter new password:\"
send \"password\r\"
expect \"Enter it again:\"
send \"password\r\"
expect eof
");
# Run the command with automated entry
echo "$PSQL_QUERY";
但是当我尝试运行脚本时,我得到的输出如下:
root@node:/home/user# ./test.sh
send: spawn id exp6 not open
while executing
"send "password\r""
spawn sudo -u postgres psql postgres -c '\password postgres'
psql: FATAL: Peer authentication failed for user "postgres'"
我不太理解这一点,因为我是 PostgreSQL 的新手,而且当我运行以下命令时:
root@node:/home/user# sudo -u postgres psql postgres -c '\password postgres'
Enter new password: <password>
Enter it again: <password>
成功了。有人能帮我理解我哪里出错了,以及我该如何纠正,以便我可以在 bash 脚本中设置新的“postgres”用户密码吗?提前谢谢!
答案1
更加简单:
sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '{password}';"
文档psql
(PostgreSQL 交互式终端)。