К основному содержанию
скилл CX Codex

postgresql — скилл для Claude Code: что делает и как установить

Помогает администрировать PostgreSQL: настраивать репликацию, резервные копии и параметры производительности. Пригодится при развёртывании и тюнинге БД.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add BagelHole/DevOps-Security-Agent-Skills --skill postgresql -a claude-code
Открыть на GitHub

Что делает postgresql

Скилл содержит инструкции и команды для развёртывания PostgreSQL на Linux (Debian, Ubuntu, RHEL) или через Docker Compose. Внутри собраны готовые шаблоны создания пользователей и прав доступа, а также шпаргалка по утилите psql. Для диагностики есть готовые SQL-запросы: отслеживание медленных запросов длиннее 30 секунд, подсчёт мёртвых строк, статистика индексов и процент попаданий в кэш.

В конфигурации postgresql.conf предложены параметры для SSD и расчёта памяти под shared_buffers и work_mem. Скилл также описывает настройку аутентификации в pg_hba.conf, создание логических бэкапов через pg_dump и физических копий с помощью pg_basebackup. Для потоковой репликации расписаны действия на основном сервере и реплике с созданием файла standby.signal.

Для установки пакетов нужен sudo или root. Изменение параметров shared_buffers и max_connections требует полного перезапуска службы, поэтому применить их на лету через pg_reload_conf() не выйдет.

Какие задачи решает

  • Настроить потоковую репликацию между primary и standby серверами
  • Отрегулировать параметры памяти shared_buffers и work_mem в postgresql.conf
  • Найти запросы длительнее 30 секунд и мёртвые строки в таблицах
  • Создать резервные копии базы через pg_dump или pg_basebackup
  • Ограничить доступ клиентов в pg_hba.conf с шифрованием scram-sha-256

Примеры запросов агенту

  • Помоги настроить streaming replication в PostgreSQL для replica-сервера
  • Подбери параметры postgresql.conf для сервера с SSD и покажи запросы для поиска долгих транзакций
  • Покажи команды для создания сжатого бэкапа базы данных через pg_dump и его восстановления

Как установить postgresql

1Через Skills CLI (Vercel)

npx skills add BagelHole/DevOps-Security-Agent-Skills --skill postgresql -a claude-code

2Вручную: положить файлы

~/.claude/skills/postgresql/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/postgresql/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора127

prometheus-grafana Скилл помогает агенту поднять сбор метрик в Prometheus, писать запросы PromQL и собирать панели Grafana. Пригодится, когда в проект нужно добавить мониторинг. CX Codex +1 449установок windows-server Скилл для администрирования Windows Server: роли и компоненты, сайты IIS, пользователи Active Directory, обновления. Пригодится, когда агент работает с Windows-инфраструктурой. CX Codex +1 449установок container-hardening Настраивает запуск контейнеров без root-прав, монтирует файловую систему только для чтения и формирует манифесты Kubernetes securityContext. CX Codex +1 433установок vulnerability-scanning Скилл для поиска и приоритизации уязвимостей в системах и зависимостях: Nessus, OpenVAS, Qualys, Nuclei. Пригодится при аудите и комплаенсе. CX Codex +1 424установок ssl-tls-management Скилл для работы с SSL/TLS: выпуск сертификатов Let's Encrypt, автопродление, cert-manager в Kubernetes и подбор шифров. Пригодится, когда настраиваешь HTTPS или чинишь истёкший сертификат. CX Codex +1 420установок hashicorp-vault Скилл для работы с HashiCorp Vault: секретные движки, методы аутентификации, политики и выпуск сертификатов прямо из чата с агентом. CX Codex +1 413установок backup-recovery Скилл настраивает резервное копирование и восстановление через rsync и Restic. Пригодится при настройке бэкапов на диск, в AWS S3 или Backblaze B2 по правилу 3-2-1. CX Codex +1 406установок database-backups Скилл для ИИ-агента: помогает настроить автоматические бэкапы PostgreSQL, MySQL и MongoDB и проверить, что из них реально восстанавливаются данные. CX Codex +1 405установок

Похожие

postgresql-database-engineering manutej Помогает проектировать схемы, выбирать индексы и оптимизировать медленные запросы в PostgreSQL. Пригодится при партиционировании больших таблиц и настройке репликации. CX Codex +1 1 800установок postgres-pro VoltAgent Community Субагент для настройки PostgreSQL, разбора медленных запросов, репликации и резервного копирования. Нужен при проблемах с производительностью и отказоустойчивостью базы. 897установок databases mrgoonie Скилл с единым справочником по MongoDB и PostgreSQL: схемы, запросы, индексы, миграции, бэкапы и администрирование. CX Codex +1 435установок postgresql-best-practices Mindrally Скилл с правилами разработки на PostgreSQL: типы данных, схема, индексы, разбор планов запросов и обслуживание базы. CX Codex +1 1 500установок PostgreSQL Database Administration Claude Скилл по администрированию PostgreSQL: проектирование схем, индексы, бэкапы и разбор медленных запросов. Пригодится, когда агент пишет SQL для тикетницы или аналитики. CX Codex +1 452установок postgresql-expert PCL Team Скилл для работы с PostgreSQL: продвинутые запросы, индексы, тюнинг производительности и продакшн-операции. Пригодится, когда агент трогает схему, SQL или план запроса. CX Codex +1 424установок

Рядом в теме «DevOps и инфраструктура»

Всё по теме «DevOps и инфраструктура» →

Вопросы о postgresql

Как установить postgresql в Claude Code?

Выполните команду npx skills add BagelHole/DevOps-Security-Agent-Skills --skill postgresql -a claude-code в терминале.

Что делает скилл postgresql?

Скилл даёт готовые инструкции по настройке PostgreSQL: установке на Linux и Docker, конфигурированию репликации, тюнингу памяти, логированию и мониторингу производительности.

Какие требования нужны для применения скилла?

Понадобится сервер под управлением Linux (Debian, Ubuntu или RHEL) либо Docker, права root или sudo для установки пакетов и базовое знание SQL.

Исходный текст

SKILL.md · MIT
---
name: postgresql
description: Administer PostgreSQL databases. Configure replication, backups, and performance tuning. Use when managing PostgreSQL deployments.
license: MIT
metadata:
  author: devops-skills
  version: "1.0"
---

# PostgreSQL

Administer, optimize, and secure PostgreSQL databases in development and production environments.

## When to Use

- You need a reliable, ACID-compliant relational database.
- Your application requires advanced features such as JSONB, full-text search, or CTEs.
- You are setting up streaming replication or point-in-time recovery.
- You need to tune an existing PostgreSQL deployment for better throughput.

## Prerequisites

- Linux server (Debian/Ubuntu or RHEL-based) or Docker.
- Root or sudo access for package installation.
- Familiarity with SQL fundamentals.

## Installation and Setup

```bash
# Debian / Ubuntu
sudo apt update
sudo apt install -y postgresql postgresql-contrib

# RHEL / Amazon Linux
sudo dnf install -y postgresql15-server postgresql15-contrib
sudo postgresql-setup --initdb
sudo systemctl enable --now postgresql

# Verify
psql --version
sudo systemctl status postgresql
```

## Initial User and Database Setup

```bash
# Switch to the postgres system user
sudo -u postgres psql
```

```sql
-- Create an application user
CREATE USER myapp WITH PASSWORD 'strong_password_here';

-- Create the database owned by that user
CREATE DATABASE mydb OWNER myapp;

-- Grant connection privileges
GRANT ALL PRIVILEGES ON DATABASE mydb TO myapp;

-- Connect to the database and set default privileges
\c mydb
ALTER DEFAULT PRIVILEGES IN SCHEMA public
  GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO myapp;
```

## psql Commands Reference

```
\l              -- list databases
\dt             -- list tables in current database
\d+ tablename   -- describe table with storage info
\du             -- list roles
\x              -- toggle expanded output
\timing on      -- show query execution time
\i file.sql     -- execute SQL from file
\copy           -- fast client-side COPY
```

## Configuration Tuning

Edit `/etc/postgresql/15/main/postgresql.conf` (path varies by OS and version).

```ini
# Connection settings
listen_addresses = '*'
max_connections = 200

# Memory — adjust to ~25% of total RAM for shared_buffers
shared_buffers = 4GB
effective_cache_size = 12GB
work_mem = 16MB
maintenance_work_mem = 512MB

# WAL / write performance
wal_buffers = 64MB
checkpoint_completion_target = 0.9
min_wal_size = 1GB
max_wal_size = 4GB

# Planner
random_page_cost = 1.1          # lower for SSD
effective_io_concurrency = 200  # for SSD

# Logging
log_min_duration_statement = 250   # log queries slower than 250 ms
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
```

```bash
# Reload configuration without restart
sudo -u postgres psql -c "SELECT pg_reload_conf();"

# Some settings (shared_buffers, max_connections) require a full restart
sudo systemctl restart postgresql
```

## pg_hba.conf — Client Authentication

```
# /etc/postgresql/15/main/pg_hba.conf
# TYPE  DATABASE  USER      ADDRESS         METHOD
local   all       postgres                  peer
host    mydb      myapp     10.0.0.0/8      scram-sha-256
host    all       all       0.0.0.0/0       reject
```

```bash
sudo systemctl reload postgresql
```

## Backup and Restore

### Logical Backups with pg_dump

```bash
# Plain SQL backup
pg_dump -U myapp -h localhost mydb > /backups/mydb_$(date +%F).sql

# Custom compressed format (recommended)
pg_dump -U myapp -h localhost -Fc mydb > /backups/mydb_$(date +%F).dump

# Backup a single table
pg_dump -U myapp -h localhost -t orders -Fc mydb > /backups/orders.dump

# Restore from custom format
pg_restore -U myapp -h localhost -d mydb --clean --if-exists /backups/mydb_2025-01-15.dump

# Restore plain SQL
psql -U myapp -h localhost -d mydb < /backups/mydb_2025-01-15.sql
```

### Physical Backups with pg_basebackup

```bash
# Full base backup (used for PITR and replica seeding)
pg_basebackup -h localhost -U replicator -D /backups/base_$(date +%F) \
  --wal-method=stream --checkpoint=fast --progress --verbose

# Verify the backup
pg_verifybackup /backups/base_2025-01-15
```

## Streaming Replication

### Primary Server

```sql
-- Create replication user
CREATE USER replicator WITH REPLICATION LOGIN PASSWORD 'repl_secret';
```

```ini
# postgresql.conf on primary
wal_level = replica
max_wal_senders = 5
wal_keep_size = 1GB
```

```
# pg_hba.conf on primary
host replication replicator 10.0.0.0/8 scram-sha-256
```

### Replica Server

```bash
# Stop PostgreSQL on the replica
sudo systemctl stop postgresql

# Remove existing data directory
sudo rm -rf /var/lib/postgresql/15/main/*

# Base backup from primary
sudo -u postgres pg_basebackup \
  -h 10.0.0.1 -U replicator \
  -D /var/lib/postgresql/15/main \
  --wal-method=stream --checkpoint=fast --progress

# Create standby signal file
sudo -u postgres touch /var/lib/postgresql/15/main/standby.signal
```

```ini
# postgresql.conf on replica
primary_conninfo = 'host=10.0.0.1 port=5432 user=replicator password=repl_secret'
hot_standby = on
```

```bash
sudo systemctl start postgresql
```

### Verify Replication

```sql
-- On primary
SELECT client_addr, state, sent_lsn, replay_lsn
FROM pg_stat_replication;

-- On replica
SELECT pg_is_in_recovery();           -- should return true
SELECT pg_last_wal_receive_lsn();
SELECT pg_last_wal_replay_lsn();
```

## Monitoring Queries

```sql
-- Active connections by state
SELECT state, COUNT(*)
FROM pg_stat_activity
GROUP BY state;

-- Long-running queries (> 30 seconds)
SELECT pid, now() - query_start AS duration, query
FROM pg_stat_activity
WHERE state = 'active'
  AND now() - query_start > interval '30 seconds'
ORDER BY duration DESC;

-- Table bloat and dead tuples
SELECT relname,
       n_live_tup,
       n_dead_tup,
       ROUND(n_dead_tup::numeric / GREATEST(n_live_tup, 1) * 100, 2) AS dead_pct
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC
LIMIT 10;

-- Index usage statistics
SELECT relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch
FROM pg_stat_user_indexes
ORDER BY idx_scan ASC
LIMIT 10;

-- Cache hit ratio (should be > 99%)
SELECT ROUND(
  100.0 * sum(blks_hit) / NULLIF(sum(blks_hit) + sum(blks_read), 0), 2
) AS cache_hit_pct
FROM pg_stat_database;

-- Database size
SELECT pg_database.datname,
       pg_size_pretty(pg_database_size(pg_database.datname)) AS size
FROM pg_database
ORDER BY pg_database_size(pg_database.datname) DESC;
```

## Docker Compose Setup

```yaml
# docker-compose.yml
version: "3.9"

services:
  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: myapp
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: mydb
    volumes:
      - pg_data:/var/lib/postgresql/data
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    command: >
      postgres
        -c shared_buffers=256MB
        -c work_mem=8MB
        -c maintenance_work_mem=128MB
        -c effective_cache_size=768MB
        -c log_min_duration_statement=250
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U myapp -d mydb"]
      interval: 10s
      timeout: 5s
      retries: 5

  pgbouncer:
    image: edoburu/pgbouncer:latest
    restart: unless-stopped
    ports:
      - "6432:6432"
    environment:
      DATABASE_URL: postgres://myapp:secret@postgres:5432/mydb
      POOL_MODE: transaction
      MAX_CLIENT_CONN: 500
      DEFAULT_POOL_SIZE: 40
    depends_on:
      postgres:
        condition: service_healthy

volumes:
  pg_data:
```

```bash
docker compose up -d
psql -h 127.0.0.1 -p 6432 -U myapp mydb
```

## Maintenance Tasks

```bash
# Manual VACUUM and ANALYZE
sudo -u postgres psql -d mydb -c "VACUUM ANALYZE;"

# Reindex a bloated index
sudo -u postgres psql -d mydb -c "REINDEX INDEX CONCURRENTLY idx_orders_user_id;"

# Check for unused indexes
sudo -u postgres psql -d mydb -c "
  SELECT indexrelname, idx_scan
  FROM pg_stat_user_indexes
  WHERE idx_scan = 0
  ORDER BY pg_relation_size(indexrelid) DESC;"
```

## Troubleshooting

| Symptom | Likely Cause | Fix |
|---|---|---|
| `FATAL: too many connections` | Connection limit reached | Increase `max_connections` or add PgBouncer |
| Slow SELECT on large table | Missing index or stale statistics | Run `EXPLAIN ANALYZE`; add index; run `ANALYZE` |
| High CPU from autovacuum | Large number of dead tuples | Tune `autovacuum_vacuum_cost_delay`; run manual `VACUUM` |
| Replication lag increasing | Replica under-provisioned or network bottleneck | Check `pg_stat_replication`; increase `wal_keep_size` |
| `could not access file "base/..."` | Disk full or corrupt data directory | Free disk space; restore from `pg_basebackup` |
| `FATAL: password authentication failed` | Wrong credentials or pg_hba.conf mismatch | Verify pg_hba.conf entries and reload |

## Related Skills

- [mysql](../mysql/) - Alternative relational database
- [database-backups](../database-backups/) - Automated backup strategies
- [redis](../redis/) - Caching layer to reduce database load
- [planetscale](../planetscale/) - Managed MySQL-compatible alternative

© devops-skills · MIT · BagelHole/DevOps-Security-Agent-Skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой