#!/bin/bash set -e # Exit immediately if a command exits with a non-zero status. # --- 1. Set up Connection Variables --- HOST=$POSTGRES_HOST PORT=$POSTGRES_PORT DB_NAME=$NEW_DB_NAME DB_USER=$NEW_DB_USER DB_PASSWORD=$NEW_DB_PASSWORD # --- 2. Build the SQL Commands --- # NOTE: The IF NOT EXISTS ensures the script can be run safely multiple times. SQL_COMMANDS=$(cat <<-END_SQL -- Create user role with login and password DO \$body\$ BEGIN IF NOT EXISTS ( SELECT FROM pg_catalog.pg_user WHERE usename = '$DB_USER') THEN CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASSWORD'; END IF; END \$body\$; -- Create database owned by the new user (if it doesn't exist) SELECT 'CREATE DATABASE $DB_NAME OWNER $DB_USER' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '$DB_NAME')\gexec END_SQL ) # --- 3. Execute the SQL Commands --- echo "Attempting to connect to $HOST to execute SQL..." echo "$SQL_COMMANDS" | psql \ --host=$HOST \ --port=$PORT \ --username=$POSTGRES_ADMIN_USER \ --dbname=postgres \ --set ON_ERROR_STOP=on echo "PostgreSQL database '$DB_NAME' and user '$DB_USER' created/verified successfully."