db-postgres

GitHub

用于查询、探索或审计配置在.env中的PostgreSQL数据库数据。支持通过标签或索引选择连接,默认只读,提供健康检查、表结构查看及JSON格式结果输出功能。

.claude/skills/db-postgres/SKILL.md evolution-foundation/evo-nexus

Trigger Scenarios

用户要求查询Postgres数据库中的数据 用户要求探索或审计Postgres数据库

Install

npx skills add evolution-foundation/evo-nexus --skill db-postgres -g -y
More Options

Non-standard path

npx skills add https://github.com/evolution-foundation/evo-nexus/tree/main/.claude/skills/db-postgres -g -y

Use without installing

npx skills use evolution-foundation/evo-nexus@db-postgres

指定 Agent (Claude Code)

npx skills add evolution-foundation/evo-nexus --skill db-postgres -a claude-code -g -y

安装 repo 全部 skill

npx skills add evolution-foundation/evo-nexus --all -g -y

预览 repo 内 skill

npx skills add evolution-foundation/evo-nexus --list

SKILL.md

Frontmatter
{
    "name": "db-postgres",
    "metadata": {
        "openclaw": {
            "files": [
                "scripts\/*",
                "references\/*"
            ],
            "requires": {
                "env": [
                    "DB_POSTGRES_1_LABEL"
                ],
                "bins": [
                    "python3"
                ]
            },
            "primaryEnv": "DB_POSTGRES_1_LABEL"
        }
    },
    "description": "Query PostgreSQL databases configured in .env (DB_POSTGRES_N_*). Use when the user asks to query, explore, or audit data in a Postgres database. Picks connection by label (e.g. 'msgops-dev', 'bms-prod') or numeric index. Read-only by default — writes refused unless DB_POSTGRES_N_ALLOW_WRITE=true on that block."
}

db-postgres

Query Postgres databases declared in .env. Connections follow the same numbered pattern as SOCIAL_YOUTUBE_N_* / SOCIAL_INSTAGRAM_N_* — one block per database, labelled for humans, picked by label or index at call time.

Setup — one-time, per database

Add a block to .env (gitignored). Increment the index per connection:

# ── Postgres: msgops-dev ─────────────────────────────
DB_POSTGRES_1_LABEL=msgops-dev
DB_POSTGRES_1_HOST=db.dev.internal
DB_POSTGRES_1_PORT=5432
DB_POSTGRES_1_DATABASE=msgops
DB_POSTGRES_1_USER=agent_readonly
DB_POSTGRES_1_PASSWORD=...                # raw; .env is gitignored
DB_POSTGRES_1_SSL_MODE=require            # disable | require | verify-ca | verify-full
# DB_POSTGRES_1_SSL_CA_PATH=/path/ca.pem  # optional, if verify-*
# DB_POSTGRES_1_ALLOW_WRITE=false         # default false
# DB_POSTGRES_1_QUERY_TIMEOUT=30          # seconds, default 30
# DB_POSTGRES_1_MAX_ROWS=1000             # default 1000

# ── Postgres: bms-prod (read-only replica) ───────────
DB_POSTGRES_2_LABEL=bms-prod
DB_POSTGRES_2_HOST=bms-ro.prod.internal
DB_POSTGRES_2_PORT=5432
DB_POSTGRES_2_DATABASE=bms
DB_POSTGRES_2_USER=agent_readonly
DB_POSTGRES_2_PASSWORD=...
DB_POSTGRES_2_SSL_MODE=require

Alternative — full DSN instead of components (DSN wins when both are set):

DB_POSTGRES_3_LABEL=evo-ai-dev
DB_POSTGRES_3_DSN=postgresql://agent_ro:***@evoai.dev.internal:5432/evoai?sslmode=require

LABEL is always required — it's how agents pick the connection.

Usage

All commands output a single JSON line on stdout (safe to pipe). Errors go to stderr as JSON and exit non-zero.

List configured connections

python3 .claude/skills/db-postgres/scripts/db_client.py accounts

Health-check a connection

python3 .claude/skills/db-postgres/scripts/db_client.py test msgops-dev

Run a read-only query

python3 .claude/skills/db-postgres/scripts/db_client.py query msgops-dev \
  "SELECT count(*) FROM users WHERE created_at > now() - interval '7 days'"

Explore schema

# List all tables (public + user schemas)
python3 .claude/skills/db-postgres/scripts/db_client.py tables msgops-dev

# Describe a table (columns, types, nullability, defaults)
python3 .claude/skills/db-postgres/scripts/db_client.py describe msgops-dev users
# Schema-qualified:
python3 .claude/skills/db-postgres/scripts/db_client.py describe msgops-dev analytics.events

Output shape

Successful query:

{
  "ok": true,
  "query_id": "uuid-v4",
  "label": "msgops-dev",
  "columns": ["id", "email", "created_at"],
  "rows": [[1, "a@b.com", "2026-04-22T12:00:00"]],
  "row_count": 1,
  "truncated": false,
  "full_result_path": null,
  "execution_time_ms": 12
}

When rows exceed MAX_ROWS, truncated is true and full_result_path points to a CSV in ADWs/logs/db-queries/<query_id>.csv — the agent can read that file directly instead of re-running the query.

Error:

{"ok": false, "error_code": "write_blocked", "error": "Write query blocked — connection 'msgops-dev' has ALLOW_WRITE=false. ...", "label": "msgops-dev"}

Error codes:

  • no_connections — no DB_POSTGRES_N_* blocks in .env
  • not_found — label/index doesn't match any block
  • ambiguous — multiple blocks share the same label (use index instead)
  • config_error — block present but required field missing (typically LABEL)
  • driver_missingpsycopg2 not installed
  • connection_failed — network, auth, TLS, or statement_timeout tripped
  • write_blocked — write verb detected without ALLOW_WRITE=true
  • multi_statement — more than one statement in a single call
  • usage — wrong CLI args

Guardrails

  • Write verbs (DELETE | UPDATE | INSERT | TRUNCATE | DROP | ALTER | CREATE | GRANT | REVOKE | COMMENT | VACUUM | REINDEX) — refused unless DB_POSTGRES_N_ALLOW_WRITE=true.
  • Multi-statement queries (anything with ; that has content after it) — refused in v1.
  • Query timeout — sets statement_timeout = <QUERY_TIMEOUT>s on the session before executing.
  • Result size — fetchmany(MAX_ROWS + 1) to detect truncation; full result streamed to CSV when truncated so the agent context never holds >1000 rows.

Workflow

  1. If the user doesn't specify a label, run accounts to see what's configured and pick the one that matches their intent. If ambiguous, ask.
  2. Write the smallest SQL that answers the question — prefer aggregates, LIMIT, and EXPLAIN before dumping rows.
  3. Run via query. Inspect the result.
  4. For performance-sensitive queries, load the deep-dive references below.

Dependencies

  • Python 3.10+
  • psycopg2-binary (or psycopg2) — not pre-installed; uv pip install psycopg2-binary on first use.

Deep-dive references

These load the PlanetScale database-skills repo verbatim — same content the upstream authors ship for their own tooling.

Upstream: planetscale/database-skills (MIT). Credit to PlanetScale for the reference content.

Version History

  • 7f5dd76 Current 2026-07-25 04:53

Same Skill Collection

.claude/skills/create-agent/SKILL.md
.claude/skills/create-command/SKILL.md
.claude/skills/create-goal/SKILL.md
.claude/skills/create-heartbeat/SKILL.md
.claude/skills/create-integration/SKILL.md
.claude/skills/create-routine/SKILL.md
.claude/skills/create-ticket/SKILL.md
.claude/skills/cs-ticket-triage/SKILL.md
.claude/skills/data-build-dashboard/SKILL.md
.claude/skills/data-create-viz/SKILL.md
.claude/skills/data-explore/SKILL.md
.claude/skills/data-statistical-analysis/SKILL.md
.claude/skills/data-validate/SKILL.md
.claude/skills/db-mongo/SKILL.md
.claude/skills/db-mysql/SKILL.md
.claude/skills/db-redis/SKILL.md
.claude/skills/dev-ai-slop-cleaner/SKILL.md
.claude/skills/dev-ask/SKILL.md
.claude/skills/dev-autopilot/SKILL.md
.claude/skills/dev-cancel/SKILL.md
.claude/skills/dev-ccg/SKILL.md
.claude/skills/dev-configure-notifications/SKILL.md
.claude/skills/dev-deep-dive/SKILL.md
.claude/skills/dev-deep-interview/SKILL.md
.claude/skills/dev-deepinit/SKILL.md
.claude/skills/dev-external-context/SKILL.md
.claude/skills/dev-learner/SKILL.md
.claude/skills/dev-mcp-setup/SKILL.md
.claude/skills/dev-plan/SKILL.md
.claude/skills/dev-project-session-manager/SKILL.md
.claude/skills/dev-ralph/SKILL.md
.claude/skills/dev-ralplan/SKILL.md
.claude/skills/dev-release/SKILL.md
.claude/skills/dev-remember/SKILL.md
.claude/skills/dev-sciomc/SKILL.md
.claude/skills/dev-skillify/SKILL.md
.claude/skills/dev-team/SKILL.md
.claude/skills/dev-trace/SKILL.md
.claude/skills/dev-ultraqa/SKILL.md
.claude/skills/dev-verify/SKILL.md
.claude/skills/dev-visual-verdict/SKILL.md
.claude/skills/discord-create-channel/SKILL.md
.claude/skills/discord-get-messages/SKILL.md
.claude/skills/discord-list-channels/SKILL.md
.claude/skills/discord-manage-channel/SKILL.md
.claude/skills/discord-send-message/SKILL.md
.claude/skills/fin-audit-support/SKILL.md
.claude/skills/fin-close-management/SKILL.md
.claude/skills/fin-daily-pulse/SKILL.md

Metadata

Files
0
Version
7f5dd76
Hash
e630d138
Indexed
2026-07-25 04:53

inicio - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-20 05:47
浙ICP备14020137号-1 $mapa de visitantes$