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.
88 lines
4.5 KiB
88 lines
4.5 KiB
#!/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 "このスクリプトは再実行可能です。再実行すると、既存のデータベースとユーザーは削除され、新しく作成されます。" |