|
| 1 | +#!/bin/bash |
| 2 | +set -e |
| 3 | + |
| 4 | +echo "Initializing databases..." |
| 5 | + |
| 6 | +# Check required environment variables |
| 7 | +if [[ -z "${POSTGRES_USER:-}" || -z "${POSTGRES_DB:-}" ]]; then |
| 8 | + echo "Error: POSTGRES_USER and POSTGRES_DB environment variables must be set." >&2 |
| 9 | + exit 1 |
| 10 | +fi |
| 11 | + |
| 12 | +# Log message for clarity |
| 13 | +echo "Creating additional databases..." |
| 14 | + |
| 15 | +# Function to create a database |
| 16 | +create_database() { |
| 17 | + local db_name=$1 |
| 18 | + echo "Creating database: $db_name" |
| 19 | + psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL |
| 20 | + SELECT 'CREATE DATABASE $db_name' |
| 21 | + WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '$db_name')\gexec |
| 22 | +EOSQL |
| 23 | + psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL |
| 24 | + SELECT 'CREATE DATABASE kb' |
| 25 | + WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'kb')\gexec |
| 26 | +EOSQL |
| 27 | +} |
| 28 | + |
| 29 | +# Function to create a user with permissions |
| 30 | +create_user() { |
| 31 | + local username=$1 |
| 32 | + local userpassword=$2 |
| 33 | + local db_name=$3 |
| 34 | + echo "Creating user: $username with access to database: $db_name" |
| 35 | + psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$db_name" <<-EOSQL |
| 36 | + DO \$\$ |
| 37 | + BEGIN |
| 38 | + IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '$username') THEN |
| 39 | + CREATE USER $username WITH PASSWORD '$userpassword'; |
| 40 | + ELSE |
| 41 | + RAISE NOTICE 'User $username already exists. Skipping.'; |
| 42 | + END IF; |
| 43 | + END |
| 44 | + \$\$; |
| 45 | + GRANT ALL PRIVILEGES ON DATABASE $db_name TO $username; |
| 46 | + GRANT ALL PRIVILEGES ON SCHEMA public TO $username; |
| 47 | + GRANT ALL ON SCHEMA public TO $username; |
| 48 | +EOSQL |
| 49 | + |
| 50 | + # Do the same for the kb db |
| 51 | + psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "kb" <<-EOSQL |
| 52 | + DO \$\$ |
| 53 | + BEGIN |
| 54 | + IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '$username') THEN |
| 55 | + CREATE USER $username WITH PASSWORD '$userpassword'; |
| 56 | + ELSE |
| 57 | + RAISE NOTICE 'User $username already exists. Skipping.'; |
| 58 | + END IF; |
| 59 | + END |
| 60 | + \$\$; |
| 61 | + GRANT ALL PRIVILEGES ON DATABASE kb TO $username; |
| 62 | + GRANT ALL PRIVILEGES ON SCHEMA public TO $username; |
| 63 | + GRANT ALL ON SCHEMA public TO $username; |
| 64 | + CREATE EXTENSION IF NOT EXISTS vector; |
| 65 | +EOSQL |
| 66 | +} |
| 67 | + |
| 68 | +# Create databases |
| 69 | +create_database "mindsdb" |
| 70 | + |
| 71 | +# Create user with permissions in a database |
| 72 | +create_user "mindsdb" "mindsdb" "mindsdb" |
| 73 | + |
| 74 | +echo "Database and user creation completed successfully." |
0 commit comments