Lab 11: PgBouncer Advanced
Overview
Step 1: Launch PostgreSQL Backend
docker network create pgbouncer-net
docker run -d \
--name pg-backend \
--network pgbouncer-net \
--hostname pg-backend \
-e POSTGRES_PASSWORD=rootpass \
-e POSTGRES_DB=appdb \
postgres:15 \
-c max_connections=100 \
-c log_connections=on \
-c log_disconnections=on
sleep 12
# Create application user and schema
docker exec pg-backend psql -U postgres appdb <<'EOF'
CREATE USER appuser WITH PASSWORD 'apppass';
GRANT ALL ON DATABASE appdb TO appuser;
\c appdb appuser
CREATE TABLE sessions (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
user_id INT,
data JSONB,
created_at TIMESTAMPTZ DEFAULT NOW()
);
INSERT INTO sessions (user_id, data)
SELECT gs, ('{"active": true, "score": ' || (random()*100)::int || '}')::jsonb
FROM generate_series(1, 1000) gs;
SELECT COUNT(*) FROM sessions;
EOFStep 2: Install and Configure PgBouncer
Step 3: Connect Through PgBouncer
Step 4: Pool Mode Comparison
Step 5: SHOW STATS and SHOW POOLS
Step 6: Simulate Connection Pool Pressure
Step 7: PAUSE and RESUME (Rolling Maintenance)
Step 8: Capstone — Dynamic Pool Sizing
Summary
Pool Mode
Connection Released
Supports
Best For
Command
Purpose
Key Takeaways
Last updated
