提供数据库迁移最佳实践,支持模式变更、回滚与零停机发布方案
复制安装指令,让 AI 自动完成配置 · 推荐新手
请帮我安装 askskill 上的 "database-migrations" 技能: 1. 下载 https://raw.githubusercontent.com/affaan-m/ECC/main/skills/database-migrations/SKILL.md 2. 保存为 ~/.claude/skills/database-migrations/SKILL.md 3. 装好后重载技能,告诉我可以用了
我需要在 PostgreSQL 的 users 表新增一个非空字段 status,线上已有大量数据。请给我一个零停机迁移方案,包含分步 SQL、回填策略、索引处理、验证方法和回滚方案。
一份可执行的分阶段迁移方案,说明每一步的 SQL、风险控制与回滚做法。
请为 Prisma 和 TypeORM 项目整理数据库迁移最佳实践,涵盖命名规范、审查清单、避免破坏性变更的方法、如何处理数据迁移,以及 CI/CD 中的发布建议。
一套适用于 ORM 项目的迁移规范与检查清单,便于团队统一执行。
生产环境的 MySQL 迁移执行到一半失败,部分数据已写入。请帮我分析常见原因,并给出故障排查步骤、回滚策略、数据一致性检查方法,以及后续如何避免再次发生。
一份针对失败迁移的排障与恢复指南,帮助快速止损并改进流程。
Safe, reversible database schema changes for production systems.
Before applying any migration:
-- GOOD: Nullable column, no lock
ALTER TABLE users ADD COLUMN avatar_url TEXT;
-- GOOD: Column with default (Postgres 11+ is instant, no rewrite)
ALTER TABLE users ADD COLUMN is_active BOOLEAN NOT NULL DEFAULT true;
-- BAD: NOT NULL without default on existing table (requires full rewrite)
ALTER TABLE users ADD COLUMN role TEXT NOT NULL;
-- This locks the table and rewrites every row
-- BAD: Blocks writes on large tables
CREATE INDEX idx_users_email ON users (email);
-- GOOD: Non-blocking, allows concurrent writes
CREATE INDEX CONCURRENTLY idx_users_email ON users (email);
-- Note: CONCURRENTLY cannot run inside a transaction block
-- Most migration tools need special handling for this
Never rename directly in production. Use the expand-contract pattern:
-- Step 1: Add new column (migration 001)
ALTER TABLE users ADD COLUMN display_name TEXT;
-- Step 2: Backfill data (migration 002, data migration)
UPDATE users SET display_name = username WHERE display_name IS NULL;
-- Step 3: Update application code to read/write both columns
-- Deploy application changes
-- Step 4: Stop writing to old column, drop it (migration 003)
ALTER TABLE users DROP COLUMN username;
-- Step 1: Remove all application references to the column
-- Step 2: Deploy application without the column reference
-- Step 3: Drop column in next migration
ALTER TABLE orders DROP COLUMN legacy_status;
-- For Django: use SeparateDatabaseAndState to remove from model
-- without generating DROP COLUMN (then drop in next migration)
-- BAD: Updates all rows in one transaction (locks table)
UPDATE users SET normalized_email = LOWER(email);
-- GOOD: Batch update with progress
DO $$
DECLARE
batch_size INT := 10000;
rows_updated INT;
BEGIN
LOOP
UPDATE users
SET normalized_email = LOWER(email)
WHERE id IN (
SELECT id FROM users
WHERE normalized_email IS NULL
LIMIT batch_size
FOR UPDATE SKIP LOCKED
);
GET DIAGNOSTICS rows_updated = ROW_COUNT;
RAISE NOTICE 'Updated % rows', rows_updated;
EXIT WHEN rows_updated = 0;
COMMIT;
END LOOP;
END $$;
# Create migration from schema changes
npx prisma migrate dev --name add_user_avatar
# Apply pending migrations in production
npx prisma migrate deploy
# Reset database (dev only)
npx prisma migrate reset
# Generate client after schema changes
npx prisma generate
…
分析并优化原始提示词,补全意图与缺口,生成可直接使用的高质量 prompt。
帮助开发团队设计稳健的部署流程、CI/CD 管道与生产发布策略。
帮助你为 React/Next.js 产品实现可复用的界面动效与过渡方案。
基于 C++ Core Guidelines 提供现代、安全、惯用的 C++ 编码规范建议
帮助 Swift 开发者用协议依赖注入编写可测试代码并高效构建 Mock。
帮助团队安全运维长期运行的智能体任务,并管理监控与生命周期。
通过 Drizzle 管理数据库模式、执行查询并自动检查 SQLite 与 PostgreSQL 结构。
提供 PostgreSQL 查询优化、模式设计、索引与安全实践建议
检查 PostgreSQL 迁移中的危险锁操作,并给出更安全的改写建议。
连接多种主流数据库,帮助用户高效查询、分析与管理数据。
帮助用户快速创建和管理 PostgreSQL 数据库、执行 SQL 并跟踪迁移。
连接并操作 PostgreSQL 数据库,完成增删改查、结构管理与库信息检查