49 lines
2.0 KiB
Bash
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
|