mcpField
D
database

database

github.com/thelobbi数据与数据库2146 次安装2 天前更新
代码仓库

关于 database

面向 Golden Armada AI Agent Fleet Platform 数据库工作的技能,覆盖 PostgreSQL 设计、SQL 查询、迁移和优化,也包含 SQLAlchemy ORM 示例。

主要功能

  1. 01PostgreSQL 模式设计
  2. 02SQL 查询与连接
  3. 03迁移与回滚
  4. 04索引和查询优化
  5. 05SQLAlchemy ORM 示例
  6. 06数据库最佳实践

适用场景

  1. 01设计 agents 与 tasks 表结构
  2. 02编写和优化 PostgreSQL 查询
  3. 03创建数据库迁移及回滚
  4. 04排查慢查询与索引使用

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/thelobbi/claude --skill database

安装后在 Claude Code 中输入/database确认已加载。

详细介绍

数据库技能

为 Golden Armada AI Agent Fleet Platform 提供全面的数据库功能。

何时使用此技能

在处理以下工作时启用此技能:

  • 数据库架构设计
  • SQL 查询编写与优化
  • 数据库迁移
  • 索引优化
  • 数据建模

PostgreSQL 快速参考

连接
# Connect
psql -h localhost -U postgres -d golden_armada

# Connection string
postgresql://user:password@host:5432/database

# Common psql commands
\l                  # List databases
\c database_name    # Connect to database
\dt                 # List tables
\d table_name       # Describe table
\di                 # List indexes
\q                  # Quit
架构设计
-- Create table with common patterns
CREATE TABLE agents (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    name VARCHAR(100) NOT NULL,
    type VARCHAR(50) NOT NULL CHECK (type IN ('claude', 'gpt', 'gemini')),
    status VARCHAR(20) DEFAULT 'idle',
    config JSONB DEFAULT '{}',
    created_at TIMESTAMPTZ DEFAULT NOW(),
    updated_at TIMESTAMPTZ DEFAULT NOW(),
    deleted_at TIMESTAMPTZ  -- Soft delete
);

-- Create index
CREATE INDEX idx_agents_type ON agents(type);
CREATE INDEX idx_agents_status ON agents(status) WHERE deleted_at IS NULL;
CREATE INDEX idx_agents_config ON agents USING GIN(config);

-- Add foreign key
CREATE TABLE tasks (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    agent_id UUID NOT NULL REFERENCES agents(id) ON DELETE CASCADE,
    message TEXT NOT NULL,
    result TEXT,
    status VARCHAR(20) DEFAULT 'pending',
    created_at TIMESTAMPTZ DEFAULT NOW()
);
常用查询
-- Basic CRUD
INSERT INTO agents (name, type) VALUES ('agent-1', 'claude') RETURNING *;
SELECT * FROM agents WHERE type = 'claude' AND deleted_at IS NULL;
UPDATE agents SET status = 'active' WHERE id = $1 RETURNING *;
DELETE FROM agents WHERE id = $1;

-- Joins
SELECT a.name, COUNT(t.id) as task_count
FROM agents a
LEFT JOIN tasks t ON a.id = t.agent_id
WHERE a.deleted_at IS NULL
GROUP BY a.id;

-- JSON operations
SELECT * FROM agents WHERE config->>'model' = 'claude-sonnet-5';
SELECT * FROM agents WHERE config @> '{"enabled": true}';
UPDATE agents SET config = config || '{"version": "2.0"}' WHERE id = $1;

-- Window functions
SELECT
    name,
    created_at,
    ROW_NUMBER() OVER (ORDER BY created_at) as row_num,
    LAG(created_at) OVER (ORDER BY created_at) as prev_created
FROM agents;

-- CTEs
WITH active_agents AS (
    SELECT * FROM agents WHERE status = 'active'
)
SELECT * FROM active_agents WHERE type = 'claude';
迁移
-- Migration: 001_create_agents.sql
BEGIN;

CREATE TABLE agents (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    name VARCHAR(100) NOT NULL,
    type VARCHAR(50) NOT NULL,
    created_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE INDEX idx_agents_type ON agents(type);

COMMIT;

-- Rollback: 001_create_agents.sql
BEGIN;
DROP TABLE IF EXISTS agents;
COMMIT;
性能优化
-- Analyze query plan
EXPLAIN ANALYZE SELECT * FROM agents WHERE type = 'claude';

-- Check index usage
SELECT
    schemaname,
    tablename,
    indexname,
    idx_scan,
    idx_tup_read
FROM pg_stat_user_indexes;

-- Find slow queries
SELECT
    query,
    calls,
    mean_time,
    total_time
FROM pg_stat_statements
ORDER BY mean_time DESC
LIMIT 10;

-- Vacuum and analyze
VACUUM ANALYZE agents;

SQLAlchemy ORM

from sqlalchemy import Column, String, DateTime, ForeignKey, JSON
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
import uuid

class Agent(Base):
    __tablename__ = 'agents'

    id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
    name = Column(String(100), nullable=False)
    type = Column(String(50), nullable=False)
    status = Column(String(20), default='idle')
    config = Column(JSON, default={})
    created_at = Column(DateTime(timezone=True), server_default=func.now())
    updated_at = Column(DateTime(timezone=True), onupdate=func.now())

    tasks = relationship("Task", back_populates="agent", cascade="all, delete-orphan")

class Task(Base):
    __tablename__ = 'tasks'

    id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
    agent_id = Column(UUID(as_uuid=True), ForeignKey('agents.id'), nullable=False)
    message = Column(String, nullable=False)
    result = Column(String)

    agent = relationship("Agent", back_populates="tasks")

最佳实践

  1. 在分布式系统中使用 UUID 作为主键
  2. 为经常查询的列添加索引
  3. 对重要数据使用软删除(deleted_at)
  4. 使用 JSONB 存储灵活数据,并添加 GIN 索引
  5. 使用外键约束确保数据完整性
  6. 记录创建和更新时间戳以便审计
  7. 使用连接池提升性能

评论

支持 Markdown