如何使用脚本为 PostgreSQL 数据库设置密码?

Cho*_*per 6 postgresql linux scripting

在我正在编写的 bash 脚本中,我需要创建一个数据库并设置一个由我的脚本自动生成的密码。

问题是我找不到在没有用户交互的情况下设置密码的方法。

我需要这样的东西:

$ createdb mydb -p $(cat password_file)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

dez*_*zso 9

文档

createdb是 SQL 命令的包装器CREATE DATABASE。通过此实用程序创建数据库与通过其他访问服务器的方法创建数据库之间没有实际区别。

这意味着您可以编写一个脚本来发出类似的命令

psql -f createdb.sql -v passwd=$passwd -v user=$user
Run Code Online (Sandbox Code Playgroud)

哪里createdb.sql包含类似

CREATE ROLE :user WITH LOGIN PASSWORD :passwd;
CREATE DATABASE mydb OWNER :user;
GRANT {some privileges on the newly created database and/or its objects};
Run Code Online (Sandbox Code Playgroud)

这意味着您将为每个创建的数据库创建一个用户。

(同时,我有点怀疑你的问题是 riouj 回答的问题。)


小智 3

为了连接到您的 PostgreSQL 实例并运行createdb作为客户端的脚本,您可以使用密码文件。该文件通常位于~/.pgpass并且必须包含这些信息:

hostname:port:database:username:password
Run Code Online (Sandbox Code Playgroud)

如果您想为密码文件使用不同的路径,可以设置PGPASSFILE环境变量。

出于安全考虑,您可以更改其权限:

chmod 600 ~/.pgpass
Run Code Online (Sandbox Code Playgroud)

如果您不想createdb提示您输入任何密码,可以使用 -w 开关(或 --no-password)并使用密码文件。

您可以查看这些功能的文档: