85 lines
2.9 KiB
Bash
85 lines
2.9 KiB
Bash
#!/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 "===================================================================" |