You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
joint_exc/backend/scripts/setup-postgres.sh

88 lines
4.5 KiB

5 months ago
#!/bin/bash
# PostgreSQLセットアップスクリプト
# このスクリプトは、データベースとユーザーを作成し、必要な権限を付与します
# 再実行可能なスクリプトです - 既存のユーザーやデータベースは削除されます
# エラーが発生した場合にスクリプトを停止
set -e
# このスクリプト自身の絶対パスを取得
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# すべての変数を export 扱いに
set -a
# .env を読み込む
. $SCRIPT_DIR/../.env
# 通常モードに戻す
set +a
# 変数の定義
DB_NAME=$LOCAL_DB_NAME
DB_USER=$LOCAL_DB_USER
DB_PASSWORD=$LOCAL_DB_PASSWORD
DB_SCHEMA="public"
echo "PostgreSQLセットアップを開始します..."
echo "データベース: $DB_NAME"
echo "ユーザー: $DB_USER"
echo "スキーマ: $DB_SCHEMA"
# PostgreSQLのsuperuserとして実行する必要があります
# 通常はpostgresユーザーを使用します
# 既存の接続を切断
echo "既存の接続を切断します..."
sudo -u postgres psql -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '$DB_NAME';" || true
# データベースの削除(存在する場合)
echo "既存のデータベースを削除します(存在する場合)..."
sudo -u postgres psql -c "DROP DATABASE IF EXISTS $DB_NAME;"
# ユーザーの削除(存在する場合)と作成
echo "ユーザー '$DB_USER' を再作成します..."
sudo -u postgres psql -c "DROP USER IF EXISTS $DB_USER;"
sudo -u postgres psql -c "CREATE USER $DB_USER WITH PASSWORD '$DB_PASSWORD';"
# データベースの作成
echo "データベース '$DB_NAME' を作成します..."
sudo -u postgres psql -c "CREATE DATABASE $DB_NAME;"
# データベースの所有者を設定
echo "データベース所有者を設定します..."
sudo -u postgres psql -c "ALTER DATABASE $DB_NAME OWNER TO $DB_USER;"
# 権限の付与
echo "データベース権限を付与します..."
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;"
# データベースに接続してスキーマ権限を付与
echo "スキーマ権限を付与します..."
sudo -u postgres psql -d $DB_NAME -c "GRANT ALL ON SCHEMA $DB_SCHEMA TO $DB_USER;"
# 既存のオブジェクトに対する権限を付与
echo "既存のオブジェクトに対する権限を付与します..."
sudo -u postgres psql -d $DB_NAME -c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA $DB_SCHEMA TO $DB_USER;" || true
sudo -u postgres psql -d $DB_NAME -c "GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA $DB_SCHEMA TO $DB_USER;" || true
sudo -u postgres psql -d $DB_NAME -c "GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA $DB_SCHEMA TO $DB_USER;" || true
# 今後作成されるオブジェクトに対する権限を設定(postgres ユーザーが作成する場合)
echo "postgres ユーザーが今後作成するオブジェクトに対する権限を設定します..."
sudo -u postgres psql -d $DB_NAME -c "ALTER DEFAULT PRIVILEGES FOR USER postgres IN SCHEMA $DB_SCHEMA GRANT ALL ON TABLES TO $DB_USER;"
sudo -u postgres psql -d $DB_NAME -c "ALTER DEFAULT PRIVILEGES FOR USER postgres IN SCHEMA $DB_SCHEMA GRANT ALL ON SEQUENCES TO $DB_USER;"
sudo -u postgres psql -d $DB_NAME -c "ALTER DEFAULT PRIVILEGES FOR USER postgres IN SCHEMA $DB_SCHEMA GRANT ALL ON FUNCTIONS TO $DB_USER;"
sudo -u postgres psql -d $DB_NAME -c "ALTER DEFAULT PRIVILEGES FOR USER postgres IN SCHEMA $DB_SCHEMA GRANT ALL ON TYPES TO $DB_USER;"
# ユーザー自身が作成するオブジェクトに対する権限を設定
echo "$DB_USER が今後作成するオブジェクトに対する権限を設定します..."
sudo -u postgres psql -d $DB_NAME -c "ALTER DEFAULT PRIVILEGES FOR USER $DB_USER IN SCHEMA $DB_SCHEMA GRANT ALL ON TABLES TO $DB_USER;"
sudo -u postgres psql -d $DB_NAME -c "ALTER DEFAULT PRIVILEGES FOR USER $DB_USER IN SCHEMA $DB_SCHEMA GRANT ALL ON SEQUENCES TO $DB_USER;"
sudo -u postgres psql -d $DB_NAME -c "ALTER DEFAULT PRIVILEGES FOR USER $DB_USER IN SCHEMA $DB_SCHEMA GRANT ALL ON FUNCTIONS TO $DB_USER;"
sudo -u postgres psql -d $DB_NAME -c "ALTER DEFAULT PRIVILEGES FOR USER $DB_USER IN SCHEMA $DB_SCHEMA GRANT ALL ON TYPES TO $DB_USER;"
echo "PostgreSQLセットアップが完了しました"
echo "データベース: $DB_NAME"
echo "ユーザー: $DB_USER"
echo "パスワード: $DB_PASSWORD"
echo ""
echo "このスクリプトは再実行可能です。再実行すると、既存のデータベースとユーザーは削除され、新しく作成されます。"