提供数据库迁移最佳实践,支持模式变更、回滚与零停机发布方案
复制安装指令,让 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
…
基于 C++ Core Guidelines 提供现代、安全、惯用的 C++ 编码规范建议
帮助你设计并实现 F# 单元、属性与集成测试的最佳实践
帮助你用 dmux 编排多智能体并行协作,加速开发与复杂任务执行。
帮助用户检索 PubMed 生物医学文献、MeSH 主题词与 PMID 引文信息。
为 Quarkus 3.x 项目提供测试驱动开发方案,支持功能开发、修复与重构。
通过 fal.ai 一站式生成图片、视频与音频内容,满足多模态创作需求
通过 Drizzle 管理数据库模式、执行查询并自动检查 SQLite 与 PostgreSQL 结构。
提供 PostgreSQL 查询优化、模式设计、索引与安全实践建议
检查 PostgreSQL 迁移中的危险锁操作,并给出更安全的改写建议。
帮助用户快速创建和管理 PostgreSQL 数据库、执行 SQL 并跟踪迁移。
连接并操作 PostgreSQL 数据库,完成增删改查、结构管理与库信息检查
帮助开发者规划 Convex 模式与数据迁移,支持破坏性变更、回填和零停机发布。