跳转到内容

数据库与迁移

Plystra v1.0 使用 Ent 作为 Go 侧 canonical schema model,同时使用版本化 SQL migrations 作为生产升级边界。

ent/schema -> typed Core schema model
ent/ -> generated code
migrations/ -> ordered production migration history
plystractl -> migration, Ent drift, doctor checks

生产升级必须使用:

Terminal window
go run ./cmd/plystractl migrate up

不要把 Ent auto migration 当作生产升级机制。

Terminal window
go run ./cmd/plystractl migrate verify
go run ./cmd/plystractl ent check
go run ./cmd/plystractl doctor

这些检查会验证 migration state、Ent/database 对齐、配置、数据库连接、schema readiness 和 service readiness。

修改 ent/schema 后:

Terminal window
go generate ./ent
go test ./...
go run ./cmd/plystractl ent check

schema 变更、generated code 和 migration files 必须一起提交。

当前 Core migration set 包含:

Migration目的
001_finance_demoFinance Reviewer 种子数据和基础授权模型。
002_resource_registryResource types、actions、mappings 和 registry metadata。
003_plugin_api_previewPlugin metadata preview tables。
004_production_readinessProduction readiness 支持。
005_official_plugins_and_templatesFirst-party plugin/template metadata。
006_data_console_mutationsData Console preview mutation 支持。
007_auth_sessionsOpaque session storage。
008_restore_database_defaults恢复现有 schema 的数据库 defaults。
009_ent_v1_integration_guardrailsEnt integration guardrails。
010_v1_core_required_fieldsv1.0 required field 对齐。
011_ent_v1_type_alignmentEnt type 对齐。
012_ent_v1_empty_database_drift_closureEmpty database Ent drift closure。
013_user_admin_grants基于 User/session 的管理员授权。
014_authn_hardeningNative auth 密码生命周期和登录审计元数据。
分组Tables
Identityusersmembersuser_memberssessions
Admin control planeadmin_grants
Tenant structurespacesgroups
Authorizationrolesmember_rolespermissionsrole_permissions
Resourcesresourcesresource_typesresource_actionsresource_mappings
Auditaudit_logsaudit_event_types
Plugin metadatapluginsplugin_admin_menusplugin_settings_definitionsplugin_settings_values
Templates and jobstemplate_installationsbackground_jobs

user_membersmember_rolesrole_permissions 这类关键关系表都是显式实体,不是隐藏 join table。

  • AuditLog 是 append-only,Ent 和 store guardrails 会阻止 update/delete。
  • 许多管理面使用 soft-delete 或 status change。
  • MemberRole 保留一等字段 scope_anchor_group_id
  • RolePermission 有自己的 ID 和 metadata。
  • User API 响应不会暴露 password_hash
  1. 备份 PostgreSQL。
  2. 应用 migrations。
  3. 验证 migrations。
  4. 运行 Ent drift check。
  5. 运行 doctor。
  6. 重启 Core。
  7. Smoke test operational endpoints、authz、Resource Registry、AuditLog、request ID 行为。

最低命令:

Terminal window
go run ./cmd/plystractl migrate up
go run ./cmd/plystractl migrate verify
go run ./cmd/plystractl ent check
go run ./cmd/plystractl doctor