93 lines
3.2 KiB
Bash
Executable File
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 |