Postgresql 以编程方式创建新的postgres用户,无需交互干预

Postgresql 以编程方式创建新的postgres用户,无需交互干预,postgresql,Postgresql,我试图在脚本中实现这一点: » sudo -u postgres createuser -PE -s user1 Enter password for new role: 我不想postgres以交互方式请求密码,因此我想执行以下操作: » sudo -u postgres createuser -PE -s user1 < /tmp/xxx »sudo-u postgres createuser-PE-s user1

我试图在脚本中实现这一点:

» sudo -u postgres createuser -PE -s user1
Enter password for new role:
我不想
postgres
以交互方式请求密码,因此我想执行以下操作:

» sudo -u postgres createuser -PE -s user1 < /tmp/xxx
»sudo-u postgres createuser-PE-s user1

其中
/tmp/xxx
包含新用户的密码。但它不起作用。如何实现此功能?

您可以在以超级用户身份(例如,
postgres
)连接到相关数据库后,使用普通SQL实现此功能:

create user user1 password 'foobar'
如果需要在脚本中执行此操作,可以将其放入sql文件中,然后将其传递给psql:

» sudo -u postgres psql --file=create_user.sql »sudo-u postgres psql--file=create_user.sql
在shell中,您可以使用here文档,如:

#!/bin/sh

psql -U postgres postgres <<OMG
 CREATE USER lutser password '`cat /tmp/xxx`' ;
OMG
#/垃圾箱/垃圾箱

我明白,但是。。。如何通过编程方式输入密码而不在某个地方输入密码?我这样做的方式是:我将它们放在一个本地文件(纯文本)中,并按密码id进行索引(也就是说,密码文件是password\u id:password。这个文件受保护,我用sudo访问它。这样,我可以通过一个简单的服务提供对这个文件的访问来集中我的密码管理。@blueFast现在在云中,最好的方法是通过一个安全机制(如安全密钥管理器)传入密码AWS vault。您可以在启动时通过环境参数来实现这一点。这样可以对环境参数进行加密。