这是我用于创建数据库的shell命令。它作为部署脚本的一部分运行,无需人工干预即可自动创建两个数据库。
# POSTGRES
apt-get install -y postgresql
echo "CREATE ROLE deploy LOGIN ENCRYPTED PASSWORD '$APP_DB_PASS';" | sudo -u postgres psql
su postgres -c "createdb db1 --owner deploy"
su postgres -c "createdb db2 --owner deploy"
service postgresql reload
在此代码中,有人可以解释如何在此阶段内将SQL文件导入postgresql。
我相信它是这样的,但我没有那样去工作:
psql --username=postgres < /etc/schema.sql
答案 0 :(得分:0)
在debian上,你可能需要关注Daniel的评论,因为PostgreSQL可能被配置为要求OS用户与db用户使用相同的用户名。
所以你需要
su postgres -c "psql -f /etc/schema.sql"
或者你可以将所有这些db创建命令放在一个漂亮的小shell脚本中(没有su postgres -c部分),然后立即运行它。类似的东西:
#!/bin/bash
echo "CREATE ROLE deploy LOGIN ENCRYPTED PASSWORD '$APP_DB_PASS';" | su postgres -c psql
createdb db1 --owner deploy
createdb db2 --owner deploy
psql db1 -f /etc/schema.sql
psql db2 -f /etc/schema.sql
然后你可以使用sudo或su -c来运行它,并简化那些可能出错的事情。