ワンクリックで
postgres-operations
PostgreSQL operational runbooks — health checks, vacuum, bloat, locks, PITR, connection pool management.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
PostgreSQL operational runbooks — health checks, vacuum, bloat, locks, PITR, connection pool management.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Production-grade GitHub Actions workflows — reusable workflows, OIDC cloud auth, caching, matrix builds, and environment protection rules. Use when the user creates, reviews, or debugs CI/CD pipelines in .github/workflows, or asks about GitHub Actions deployment, OIDC authentication, or workflow optimization.
Systematic diagnosis of Kubernetes pod failures — CrashLoopBackOff, OOMKilled, Pending, ImagePullBackOff, and service connectivity issues. Use when the user encounters pods not starting, container restart loops, scheduling failures, or service unreachability in a K8s cluster.
Implement distributed tracing with OpenTelemetry, Tempo/Jaeger — instrumentation, sampling, and trace-to-log correlation. Use when the user asks about distributed tracing, OpenTelemetry setup, span instrumentation, trace propagation, or connecting traces to logs and metrics.
Design reusable React components with compound patterns, controlled/uncontrolled hybrids, typed prop APIs, async state handling, and ARIA accessibility. Use when the user creates, refactors, or reviews React components, or mentions props, hooks, .tsx files, component APIs, or accessible UI patterns.
Apply STRIDE threat modeling to system designs, identify IDOR and authorization vulnerabilities, and build threat matrices for security reviews. Use when the user designs a new system, reviews an architecture, prepares for a security audit, or asks about common API vulnerabilities like IDOR or broken access control.
Secure CI/CD pipelines with keyless signing, OIDC federation, provenance attestations, policy enforcement, and hardened runners.
| name | postgres-operations |
| type | skill |
| description | PostgreSQL operational runbooks — health checks, vacuum, bloat, locks, PITR, connection pool management. |
| related-rules | ["backup-policy.md","access-control.md","migration-runbook.md"] |
| allowed-tools | Read, Bash |
Expertise: PostgreSQL health, vacuuming, lock analysis, PITR, WAL archiving, PgBouncer, K8s-hosted PostgreSQL.
When investigating a slow database, diagnosing lock waits, running PITR recovery, or managing a PostgreSQL instance.
-- Database size overview
SELECT
datname,
pg_size_pretty(pg_database_size(datname)) AS size,
numbackends AS active_connections
FROM pg_stat_database
ORDER BY pg_database_size(datname) DESC;
-- Table sizes (top 20)
SELECT
schemaname || '.' || tablename AS table,
pg_size_pretty(pg_total_relation_size(schemaname || '.' || tablename)) AS total_size,
pg_size_pretty(pg_relation_size(schemaname || '.' || tablename)) AS table_size,
pg_size_pretty(pg_indexes_size(schemaname || '.' || tablename)) AS index_size
FROM pg_tables
ORDER BY pg_total_relation_size(schemaname || '.' || tablename) DESC
LIMIT 20;
-- Replication lag (primary)
SELECT
client_addr,
state,
pg_size_pretty(pg_wal_lsn_diff(sent_lsn, replay_lsn)) AS replication_lag
FROM pg_stat_replication;
-- Active locks and blocking queries
SELECT
blocking.pid AS blocking_pid,
blocking.query AS blocking_query,
blocked.pid AS blocked_pid,
blocked.query AS blocked_query,
blocked.wait_event_type,
blocked.wait_event
FROM pg_stat_activity blocking
JOIN pg_stat_activity blocked
ON blocked.wait_event_type = 'Lock'
AND blocking.pid != blocked.pid
WHERE blocking.state = 'active';
-- Kill blocking query (confirm before running!)
SELECT pg_terminate_backend(<blocking_pid>);
-- Long-running queries (> 5 min)
SELECT pid, now() - pg_stat_activity.query_start AS duration, query, state
FROM pg_stat_activity
WHERE (now() - pg_stat_activity.query_start) > interval '5 minutes'
AND state = 'active';
-- Check autovacuum health
SELECT
schemaname || '.' || relname AS table,
last_autovacuum,
last_autoanalyze,
n_dead_tup,
n_live_tup,
round(n_dead_tup::numeric / NULLIF(n_live_tup + n_dead_tup, 0) * 100, 2) AS dead_pct
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC
LIMIT 20;
-- Manual VACUUM ANALYZE (non-blocking)
VACUUM ANALYZE VERBOSE orders;
-- VACUUM FULL (rewrites table — locks! use with maintenance window)
VACUUM FULL orders;
# Check PgBouncer stats
psql -h pgbouncer -p 6432 pgbouncer -c "SHOW POOLS;"
psql -h pgbouncer -p 6432 pgbouncer -c "SHOW STATS;"
psql -h pgbouncer -p 6432 pgbouncer -c "SHOW CLIENTS;"
# Reload config (no restart needed)
psql -h pgbouncer -p 6432 pgbouncer -c "RELOAD;"
# PgBouncer config for transaction mode (K8s apps)
[databases]
mydb = host=postgres-primary port=5432 dbname=mydb
[pgbouncer]
pool_mode = transaction
max_client_conn = 1000
default_pool_size = 20
min_pool_size = 5
server_idle_timeout = 600
# Verify backup status
pgbackrest --stanza=main info
# Take full backup
pgbackrest --stanza=main --type=full backup
# PITR restore to specific time
pgbackrest --stanza=main --delta restore \
--target="2024-11-15 03:40:00" \
--target-action=promote
# After restore: promote replica to primary
pg_ctl promote -D /var/lib/postgresql/data
# Check cluster status (CloudNativePG)
kubectl get cluster -n database
kubectl describe cluster postgres-cluster -n database
# Connect to primary
kubectl exec -it -n database \
$(kubectl get pods -n database -l cnpg.io/cluster=postgres-cluster,role=primary -o name) \
-- psql -U postgres mydb
# Manual failover
kubectl cnpg promote postgres-cluster -n database
# Check backup status
kubectl get backup -n database