41 lines
1.3 KiB
Bash
Executable File
41 lines
1.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# Initialize database user and database
|
|
# This script runs before SQL files in docker-entrypoint-initdb.d
|
|
# It must be named with 00_ prefix to run first
|
|
|
|
set -e
|
|
|
|
APP_DB_NAME="${APP_DB_NAME:-ai_conversations}"
|
|
APP_DB_USER="${APP_DB_USER:-myapp_user}"
|
|
APP_DB_PASSWORD="${APP_DB_PASSWORD:-secure_password_123}"
|
|
|
|
echo "Creating database user: $APP_DB_USER"
|
|
# Create user
|
|
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
|
|
DO \$\$
|
|
BEGIN
|
|
IF NOT EXISTS (SELECT FROM pg_catalog.pg_user WHERE usename = '$APP_DB_USER') THEN
|
|
CREATE USER $APP_DB_USER WITH PASSWORD '$APP_DB_PASSWORD';
|
|
END IF;
|
|
END
|
|
\$\$;
|
|
ALTER USER $APP_DB_USER CREATEDB;
|
|
EOSQL
|
|
|
|
echo "Creating database: $APP_DB_NAME"
|
|
# Create database
|
|
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
|
|
SELECT 'CREATE DATABASE $APP_DB_NAME'
|
|
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '$APP_DB_NAME')\gexec
|
|
GRANT ALL PRIVILEGES ON DATABASE $APP_DB_NAME TO $APP_DB_USER;
|
|
EOSQL
|
|
|
|
echo "Granting schema privileges"
|
|
# Grant schema privileges
|
|
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$APP_DB_NAME" <<-EOSQL
|
|
GRANT ALL ON SCHEMA public TO $APP_DB_USER;
|
|
EOSQL
|
|
|
|
echo "Database initialization complete!"
|
|
|