#!/bin/bash
# 실습 #14 ① — PostgreSQL 16 설치 + DB/USER/CRUD 기본
# - 우분투 기본 저장소의 postgresql-16 + contrib (pgbench 포함)
# - postgres OS 계정 + lab DB 사용자 분리
# - 1회 CRUD 라운드로 동작 확인
set -e

# 1) 설치
sudo apt update
sudo apt install -y postgresql-16 postgresql-contrib-16

# 2) 서비스 상태
sudo systemctl enable --now postgresql
sudo systemctl status postgresql --no-pager | head -10

# 3) lab 사용자 + DB 생성 (이미 있으면 skip)
sudo -u postgres psql -tc "SELECT 1 FROM pg_roles WHERE rolname='lab'" | grep -q 1 || \
    sudo -u postgres psql -c "CREATE USER lab WITH PASSWORD 'lab';"

sudo -u postgres psql -tc "SELECT 1 FROM pg_database WHERE datname='bench'" | grep -q 1 || \
    sudo -u postgres createdb -O lab bench

# 4) pg_hba.conf — peer → md5 로 (lab 사용자가 비밀번호로 접속 가능하게)
HBA=$(sudo -u postgres psql -tAc "SHOW hba_file;")
if ! sudo grep -q "^# === lab override ===" "$HBA"; then
    sudo tee -a "$HBA" >/dev/null <<EOF

# === lab override ===
local   bench   lab                                   md5
host    bench   lab        127.0.0.1/32               md5
EOF
    sudo systemctl reload postgresql
    echo "→ pg_hba.conf 갱신 + reload"
fi

# 5) 접속 + CRUD 1회
echo
echo "=== CRUD 라운드 ==="
PGPASSWORD=lab psql -h 127.0.0.1 -U lab -d bench <<'SQL'
DROP TABLE IF EXISTS users;
CREATE TABLE users (id SERIAL PRIMARY KEY, name TEXT, email TEXT, created_at TIMESTAMPTZ DEFAULT now());
INSERT INTO users (name, email) VALUES ('alice','a@example.com'), ('bob','b@example.com');
SELECT * FROM users ORDER BY id;
UPDATE users SET email='alice@new.com' WHERE name='alice';
DELETE FROM users WHERE name='bob';
SELECT * FROM users ORDER BY id;
SQL

# 6) 버전·설정 위치 한 줄 요약
echo
echo "=== 버전·설정 위치 ==="
sudo -u postgres psql -tAc "SELECT version();"
sudo -u postgres psql -tAc "SHOW config_file;"
sudo -u postgres psql -tAc "SHOW data_directory;"
