ci-demo-2/infrastructure/postgresql/initdb.d/0010_create_multiple_databa...

49 lines
2.0 KiB
Bash

#!/bin/bash
set -e
set -u
function create_user_and_database() {
local database=$1
echo " Creating user and database '$database'"
psql -v ON_ERROR_STOP=1 --username postgres <<EOSQL
CREATE USER $database PASSWORD '$database';
CREATE USER ${database}_admin WITH PASSWORD '${database}_admin';
ALTER USER ${database}_admin WITH CREATEROLE;
CREATE DATABASE $database;
ALTER DATABASE $database OWNER TO ${database}_admin
EOSQL
psql -v ON_ERROR_STOP=1 --username postgres -d "$database" <<EOSQL
CREATE SCHEMA ${database};
ALTER SCHEMA ${database} OWNER TO ${database}_admin;
GRANT USAGE ON SCHEMA ${database} TO ${database};
GRANT ALL ON SCHEMA ${database} TO ${database}_admin;
GRANT select,insert,update,delete ON ALL TABLES IN SCHEMA ${database} TO ${database};
ALTER DEFAULT PRIVILEGES FOR USER ${database}_admin IN SCHEMA ${database} GRANT select,insert,update,delete ON TABLES TO ${database};
GRANT select,usage ON ALL SEQUENCES IN SCHEMA ${database} to ${database};
ALTER DEFAULT PRIVILEGES FOR USER ${database}_admin IN SCHEMA ${database} GRANT select,usage ON SEQUENCES TO ${database};
GRANT execute ON ALL FUNCTIONS IN SCHEMA ${database} to ${database};
ALTER DEFAULT PRIVILEGES FOR user ${database}_admin IN SCHEMA ${database} GRANT execute ON FUNCTIONS TO ${database};
ALTER DEFAULT PRIVILEGES FOR user ${database}_admin IN SCHEMA ${database} GRANT execute ON FUNCTIONS TO ${database};
-- extensions must be created by superuser
-- therefore we cannot create them as part of the application setup process
CREATE EXTENSION IF NOT EXISTS pgcrypto WITH SCHEMA ${database};
CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA ${database};
EOSQL
}
if [ -n "$POSTGRESQL_MULTIPLE_DATABASES" ]; then
echo "Multiple database creation requested: $POSTGRESQL_MULTIPLE_DATABASES"
for db in $(echo "$POSTGRESQL_MULTIPLE_DATABASES" | tr ',' ' '); do
create_user_and_database "$db"
done
echo "Multiple databases created"
fi