[ PROMPT_NODE_25924 ]
PocketBase 迁移
[ SKILL_DOCUMENTATION ]
# PocketBase 迁移与模式版本控制
## 概述
PocketBase 支持两种模式管理方法:
1. **自动迁移 (Auto-migrate)**(开发环境默认)— 仪表板的更改会自动在 `pb_migrations/` 中生成迁移文件
2. **手动迁移 (Manual migrations)** — 手动编写迁移文件以获得完全控制权
## CLI 命令
bash
# 创建一个新的空迁移文件
./pocketbase migrate create "add_posts_collection"
# 创建:pb_migrations/1234567890_add_posts_collection.js
# 应用所有待处理的迁移
./pocketbase migrate up
# 回滚最后一次应用的迁移
./pocketbase migrate down
# 生成所有当前集合的完整快照
./pocketbase migrate collections
# 创建一个从头开始重新创建所有集合的迁移文件
# 将迁移历史与实际数据库状态同步(标记所有为已应用)
./pocketbase migrate history-sync
## 自动迁移模式
默认启用。当您在仪表板中更改集合时,PocketBase 会自动在 `pb_migrations/` 中生成迁移文件。
bash
# 以自动迁移模式启动(默认)
./pocketbase serve
# 禁用自动迁移(生产环境)
./pocketbase serve --automigrate=0
**工作流**:
1. 在开启自动迁移的情况下进行开发 — 使用仪表板设计模式
2. 迁移文件会自动生成在 `pb_migrations/` 中
3. 将这些文件提交到 git
4. 部署:迁移会在 `serve` 启动时自动运行
5. 在生产环境中:使用 `--automigrate=0` 防止仪表板更改生成新的迁移
## 迁移文件格式
js
// pb_migrations/1234567890_add_posts_collection.js
migrate(
// UP — 应用迁移
function(app) {
var collection = new Collection({
name: "posts",
type: "base",
fields: [
{ name: "title", type: "text", required: true },
{ name: "body", type: "editor" },
{ name: "author", type: "relation", collectionId: "USERS_COLLECTION_ID", cascadeDelete: false, maxSelect: 1, required: true },
{ name: "status", type: "select", values: ["draft", "published", "archived"] },
{ name: "published_at", type: "date" },
{ name: "tags", type: "relation", collectionId: "TAGS_COLLECTION_ID", maxSelect: 0 }
],
indexes: [
"CREATE INDEX idx_posts_author ON posts (author)",
"CREATE INDEX idx_posts_status ON posts (status)",
"CREATE UNIQUE INDEX idx_posts_title ON posts (title)"
],