功能简介
Schema Version 保存一份目标 Table 结构,服务端与当前 active 版本计算迁移计划并异步应用。只有新版本成功后才切换当前可见结构;历史版本可用于逻辑回滚,但回滚不会撤销已经执行的物理 DDL,也不会恢复业务数据。
当前支持范围
- Schema Version 创建与查询(APPBASE_ENHANCED):保存目标表结构为版本,查看活动、历史和失败记录,并只在新版本成功后切换当前可见结构。
- Schema Version 回滚(APPBASE_ENHANCED):把当前可见 Schema 切回历史版本;回滚不撤销物理 DDL,也不会恢复已经变化的业务数据。
适用场景
- 为多张 Table 的结构变更保留统一历史。
- 观察 pending、running、applying、active、deprecated 或 failed 状态。
- 在兼容范围内切回历史可见 Schema。
前置条件
- Database 已存在。
- API Key/Admin 具备
databases.write。 - 已备份关键数据,并评估破坏性变更。
Console 操作路径
Console → Project → Databases → Database → Schema Versions。创建版本后观察状态与错误;选择历史版本执行 rollback 前先阅读影响提示。
SDK 示例
SDK · TypeScript
import { Client, TablesDB } from 'appbase-console-sdk';
const client = new Client()
.setEndpoint('https://<APPBASE_HOST>/v1')
.setProject('<PROJECT_ID>')
.setKey('<API_KEY>');
const tables = new TablesDB(client);
const version = await tables.createSchemaVersion({
databaseId: '<DATABASE_ID>',
schema: {
tables: [{
tableId: 'articles',
columns: [{ key: 'title', type: 'string', size: 255, required: true }],
indexes: []
}]
}
});
await tables.getSchemaVersion({
databaseId: '<DATABASE_ID>',
versionId: version.$id
});REST 示例
REST · Bash
curl 'https://<APPBASE_HOST>/v1/tablesdb/<DATABASE_ID>/schema/versions' \
-X POST \
-H 'X-Appwrite-Project: <PROJECT_ID>' \
-H 'X-Appwrite-Key: <API_KEY>' \
-H 'Content-Type: application/json' \
--data '{"schema":{"tables":[]}}'常见错误
| 现象 | 处理建议 |
|---|---|
| 版本长时间 pending/running | 检查 Schema Worker、Redis、数据库和任务状态,不要盲目重复提交。 |
failed | 读取错误,修正目标 Schema 后重新提交新版本。 |
| 结构冲突 | 等待同一 Database 的当前变更完成;服务端使用 mutation lock 串行化关键步骤。 |
| rollback 后数据未恢复 | 这是预期边界;从备份或业务恢复流程处理数据。 |
当前限制
- 逻辑 rollback 只切换当前可见 Schema,不保证反向执行物理 DDL。
- 删除列、缩窄类型和唯一约束等可能造成不可逆影响。
- 没有独立 compare preview 或 retry Action;见边界页。
Appwrite 兼容说明
Database/Table/Column 仍保持兼容;Schema Version 是 AppBase 结构演进增强。
AppBase 增强说明
AppBase 保存版本状态与历史,只在成功后切换 active,并提供创建、列表、详情和 rollback SDK/REST。
发布状态和验证 Commit
origin/main 已核验。验证 Commit:0363062a1c7ea08741975bb5ba0c3361663c9353。
权威来源文件列表
backend-candidate:src/Appwrite/Platform/Modules/Databases/Http/TablesDB/Schema/CreateVersion.phpbackend-candidate:src/Appwrite/Platform/Modules/Databases/Http/TablesDB/Schema/GetVersion.phpbackend-candidate:src/Appwrite/Platform/Modules/Databases/Http/TablesDB/Schema/ListVersions.phpbackend-candidate:src/Appwrite/Platform/Modules/Databases/Http/TablesDB/Schema/RollbackVersion.phpbackend-candidate:src/Appwrite/Platform/Modules/Databases/Schema/SchemaVersionService.phpbackend-candidate:tests/e2e/Services/TablesDB/TablesDBSchemaVersioningTest.phpbackend-candidate:tests/unit/Database/SchemaVersionServiceRollbackTest.php
Appwrite taxonomy 仅作信息架构参考:https://appwrite.io/docs/products/databases。上游页面不是 AppBase 实现证据。