【问题标题】:shell script to add postgres user with superuser privileges用于添加具有超级用户权限的 postgres 用户的 shell 脚本
【发布时间】: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


【解决方案1】:

psql -c 在不进入交互模式的情况下执行命令。 查看http://www.postgresql.org/docs/9.3/static/app-psql.html

【讨论】:

  • 谢谢,它执行查询很累,但要求输入 linux root 密码,当我提供正确的密码时失败,看起来它假设 'root' 作为 postgres db 用户,我不是 aure
  • 用你的 postgres 用户名试试psql -U [username] -c ...
  • 管道到标准输入也是如此,所以这不应该是问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-07
  • 1970-01-01
  • 2012-11-05
  • 1970-01-01
相关资源
最近更新 更多