我正在尝试使用预先创建的用户和默认数据库自动初始化 postgresql 数据目录。我知道我可以通过在后台运行 postgresql 并使用命令来做到这一点createdb
,createuser
但我真的想避免这种情况,因为这是针对 docker 容器的,我只希望 postgres 在完成后在前台运行。
在 MySQL 中,我使用--init-file /path/to/bootstrap.sql
,它在服务器接受连接之前运行文件中的语句。您还可以使用--bootstrap
,它会临时启动 mysqld 并从 STDIN 运行语句。
我在 Postgres 中找不到同样直接的方法来做到这一点。我可以看到一个--boot
选项postgres
,但是当我尝试使用它时,我只是得到“无效的命令行参数”,所以我一定是做错了什么。
echo "CREATE USER bob WITH PASSWORD 'secure';" | postgres --boot postgres -D data
postgres: invalid command-line arguments
您可能需要单用户模式:
--single
,如文档中所述:请注意,
initdb
已运行以在创建数据库或用户之前初始化一个空数据目录。mysql_install_db
如果您更愿意从 MySQL 类比的角度来看这个问题,那将是等价的。