code_runner/script/create_db.sh

93 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
# Настройки подключения
DB_HOST="localhost"
DB_PORT="5432"
DB_USER="postgres"
DB_PASSWORD="123"
DB_NAME="postgres"
# Настройки новой БД
NEW_DB='code_ru'
NEW_USER='code_ru'
NEW_PASS='code_ru'
# Экспортируем переменную для входа без пароля значение из
export PGPASSWORD="$DB_PASSWORD"
# Проверка наличия psql
if ! command -v psql &> /dev/null
then
echo "psql не найден. Установите PostgreSQL."
exit 1
fi
# Функция для проверки существования базы данных
db_exists() {
psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -lqt | cut -d \| -f 1 | grep -w "$1"
}
# Функция для создания пользователя базы данных
create_user() {
echo "Создание пользователя [ $1 ]"
psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -q -c "CREATE ROLE $1 WITH LOGIN PASSWORD '$2';"
if [ $? -eq 0 ]; then
echo "Пользователь [ $1 ] успешно создан."
else
echo "Фатальная ошибка при создании пользователя $1."
exit 1
fi
}
# Функция для создания базы данных
create_db() {
echo "Создание базы данных [ $1 ]"
psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -q -c "CREATE DATABASE $1 WITH OWNER = $2 ENCODING = 'UTF8' LC_COLLATE = 'ru_RU.UTF-8' LC_CTYPE = 'ru_RU.UTF-8'
TEMPLATE = template0; "
if [ $? -eq 0 ]; then
echo "База данных [ $1 ] успешно создана!"
else
echo "Выход из скрипта. Фатальная ошибка при создании базы данных $1."
exit 1
fi
}
# Функция для предоставления прав пользователю на базу данных
grant_privileges() {
echo "Предоставление прав пользователю [ $1 ] на базу данных [ $2 ]"
psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -q -c "GRANT ALL PRIVILEGES ON DATABASE \"$2\" TO $1;"
if [ $? -eq 0 ]; then
echo "Права успешно предоставлены."
else
echo "Выход из скрипта. Фатальная ошибка при предоставлении прав."
exit 1
fi
}
# SQL-запрос для проверки существования пользователя
SQL="SELECT 1 FROM pg_catalog.pg_user WHERE usename = '$NEW_USER';"
if psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -q -t -c "$SQL" | grep -q "1"; then
echo "Пользователь [ $NEW_USER ] уже существует."
else
echo "Пользователь [ $NEW_USER ] не существует."
create_user "$NEW_USER" "$NEW_PASS"
fi
# Проверка существования базы данных
if db_exists "$NEW_DB"; then
echo "База данных [ $NEW_DB ] уже существует."
else
# Создание базы данных
create_db "$NEW_DB" "$NEW_USER"
fi
# Предоставление прав пользователю на базу данных
grant_privileges "$NEW_USER" "$NEW_DB"
echo "Скрипт завершен успешно!"
exit 0