关于 database
面向 Golden Armada AI Agent Fleet Platform 数据库工作的技能,覆盖 PostgreSQL 设计、SQL 查询、迁移和优化,也包含 SQLAlchemy ORM 示例。
主要功能
- 01PostgreSQL 模式设计
- 02SQL 查询与连接
- 03迁移与回滚
- 04索引和查询优化
- 05SQLAlchemy ORM 示例
- 06数据库最佳实践
适用场景
- 01设计 agents 与 tasks 表结构
- 02编写和优化 PostgreSQL 查询
- 03创建数据库迁移及回滚
- 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")
最佳实践
- 在分布式系统中使用 UUID 作为主键
- 为经常查询的列添加索引
- 对重要数据使用软删除(
deleted_at) - 使用 JSONB 存储灵活数据,并添加 GIN 索引
- 使用外键约束确保数据完整性
- 记录创建和更新时间戳以便审计
- 使用连接池提升性能
评论
支持 Markdown