【发布时间】:2014-11-03 16:16:06
【问题描述】:
我正在尝试编写 shell 脚本来创建一个具有超级用户权限的 postgres db 用户,然后通过使用新创建的用户登录来自动运行一些 sql 脚本。
我尝试了下面的两个脚本,但我进入了 psql 交互模式,我们如何避免任何外部输入并提供所需的所有凭据,并在给定路径中完成创建 user/db/ 和带有一些脚本的表。如果有什么不清楚的地方,请允许我纠正。
脚本1:
#!/bin/sh
username="testuser"
psql $username << EOF
CREATE ROLE $username WITH SUPERUSER CREATEDB CREATEROLE LOGIN ENCRYPTED PASSWORD 'password';
EOF
以“root”身份在脚本上运行时的结果 评论:testuser 是 linux 用户而不是 postgres 用户??
Password:
注释:用户“testuser”的密码输入
psql: FATAL: password authentication failed for user "root"
脚本2
#!/bin/sh
username="testuser"
echo """
CREATE ROLE $username WITH SUPERUSER CREATEDB CREATEROLE LOGIN ENCRYPTED PASSWORD 'password';
""" | psql
【问题讨论】:
-
我删除了我不相关的答案。问题不在于脚本。它带有身份验证。您正在尝试使用
md5身份验证作为用户root,但您没有提供密码。请改用peer身份验证或创建.pgpass文件。有关详细信息,请参阅用户手册。 (以后,请始终显示错误消息的确切文本)。 -
我不想在提示时提供密码,也不想更改身份验证方法,我可以在脚本中的某处包含密码吗?我使用了 -w 标志(thorws:psql:fe_sendauth:未提供密码) 但在此之前需要做其他事情吗?如果可能,请告知
-
PGPASSWORD环境变量(不安全)或.pgpass文件。有关详细信息,请参阅手册。 -
当我使用用户名 'rafiq' 运行上面的脚本并在 .pgpass 文件中添加这一行 '1.1.1.1:5432:*:rafiq:rafiq' 时,我真的对 linux 用户名和 postgres 用户感到困惑抛出错误警告:密码文件“/home/rafiq/.pgpass”具有组或世界访问权限;权限应为 u=rw (0600) 或更少密码:psql:致命:数据库“rafiq”不存在
标签: linux postgresql shell centos