LoginSignup
0

More than 3 years have passed since last update.

PostgreSQLの CREATE (DATABASE|USER) で IF NOT EXISTS のようなことをしたい

Last updated at Posted at 2019-05-06

要約

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エラーになるユーザ名やデータベース名の対処です。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0