#!/bin/bash # database/scripts/configure-postgres.sh # # PostgreSQL Configuration Management Script # Applies recommended settings based on system resources # NOTE THIS FILE IS FOR REFERENCE PURPOSE ONLY SINCE WE ARE USING INSIDE A DOCKER CONTAINER # - WE HAVE FIND ANOTHER WAY TO PROVISION THIS SHELL SCRIPT # -- DO NOT USE set -e # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color echo "===================================================================" echo "PostgreSQL Configuration Script for Aurganize V6.2" echo "===================================================================" # Check if running as root if [[ $EUID -ne 0 ]]; then echo -e "${RED}This script must be run as root${NC}" exit 1 fi # Detect PostgreSQL version PG_VERSION=$(sudo -u postgres psql -t -c "SELECT version();" | grep -oP '\d+(?:\.\d+)?' | head -1 | cut -d. -f1) echo -e "${GREEN}Detected PostgreSQL version: ${PG_VERSION}${NC}" # Detect total RAM TOTAL_RAM_KB=$(grep MemTotal /proc/meminfo | awk '{print $2}') TOTAL_RAM_GB=$((TOTAL_RAM_KB / 1024 / 1024)) echo -e "${GREEN}Detected RAM: ${TOTAL_RAM_GB}GB${NC}" # Calculate settings SHARED_BUFFERS_GB=$((TOTAL_RAM_GB / 4)) EFFECTIVE_CACHE_GB=$((TOTAL_RAM_GB * 3 / 4)) WORK_MEM_MB=$(((TOTAL_RAM_GB - SHARED_BUFFERS_GB) * 1024 / 100 / 3)) echo "" echo "Recommended settings:" echo " shared_buffers = ${SHARED_BUFFERS_GB}GB" echo " effective_cache_size = ${EFFECTIVE_CACHE_GB}GB" echo " work_mem = ${WORK_MEM_MB}MB" echo "" # Ask for confirmation read -p "Apply these settings? (y/n) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "Aborted." exit 0 fi # Backup current config CONFIG_FILE="/etc/postgresql/${PG_VERSION}/main/postgresql.conf" BACKUP_FILE="${CONFIG_FILE}.backup.$(date +%Y%m%d_%H%M%S)" echo -e "${YELLOW}Backing up config to: ${BACKUP_FILE}${NC}" cp "${CONFIG_FILE}" "${BACKUP_FILE}" # Apply settings echo -e "${GREEN}Applying settings...${NC}" sudo -u postgres psql -c "ALTER SYSTEM SET shared_buffers = '${SHARED_BUFFERS_GB}GB';" sudo -u postgres psql -c "ALTER SYSTEM SET effective_cache_size = '${EFFECTIVE_CACHE_GB}GB';" sudo -u postgres psql -c "ALTER SYSTEM SET work_mem = '${WORK_MEM_MB}MB';" sudo -u postgres psql -c "ALTER SYSTEM SET maintenance_work_mem = '256MB';" sudo -u postgres psql -c "ALTER SYSTEM SET random_page_cost = '1.1';" sudo -u postgres psql -c "ALTER SYSTEM SET effective_io_concurrency = '200';" # Restart PostgreSQL echo -e "${YELLOW}Restarting PostgreSQL...${NC}" systemctl restart postgresql # Verify echo -e "${GREEN}Configuration applied successfully!${NC}" sudo -u postgres psql -c "SELECT name, setting, unit FROM pg_settings WHERE name IN ('shared_buffers', 'effective_cache_size', 'work_mem');" echo "" echo "===================================================================" echo "Configuration complete!" echo "Backup saved to: ${BACKUP_FILE}" echo "==================================================================="