要約
Vagrantや、あるいはChefのようなプロビジョニングを行うツールで活用することを目的としています。
PostgreSQLでは、CREATE DATABASE, CREATE USER で IF NOT EXISTS がサポートされていないので、psql と grep で代替します。
CREATE USER IF NOT EXISTS の代替
sudo -i -u postgres psql -c "SELECT * FROM pg_shadow" | grep "(ユーザ名)"; \
if [ $? -ne 0 ]; then \
sudo -i -u postgres psql -c "CREATE USER \\"(ユーザ名)\\" WITH PASSWORD '(パスワード)'"; \
fi
CREATE DATABASE IF NOT EXISTS の代替
sudo -i -u postgres psql -l | grep "(データベース名)"; \
if [ $? -ne 0 ]; then \
sudo -i -u postgres psql -c "
CREATE DATABASE \\"(データベース名)\\"
WITH OWNER \\"(ユーザ名)\\"
ENCODING = 'UTF8'
LC_COLLATE = 'ja_JP.UTF-8'
LC_CTYPE = 'ja_JP.UTF-8'
"; \
fi
補足
ユーザ名、データベース名で「\\"」とエスケープしていますが、ハイフンなど、そのままだとSQLエラーになるユーザ名やデータベース名の対処です。