#!/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