ワンクリックで
aim-database-migration
AIM 数据库迁移规范与 Docker Compose 集成。当修改 migration SQL 文件、新增迁移、修改 docker-compose.yaml 的 migrate 服务、或排查迁移失败时使用。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
AIM 数据库迁移规范与 Docker Compose 集成。当修改 migration SQL 文件、新增迁移、修改 docker-compose.yaml 的 migrate 服务、或排查迁移失败时使用。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
aim 的进程内共享包域。对应 `app/shared` 模块。
AIM 的附件域。涉及 `app/attachment`、AttachmentService gRPC、上传/下载授权、SeaweedFS/S3 签名、附件元数据、`aim.attachment.uploaded` 事件时使用。
aim 的认证域。对应 `auth` 模块。
aim 的核心域。对应 `core` 模块。
AIM 开发测试工具(dev-tool)。Python CLI,覆盖 gateway 全部 REST 端点与 WebSocket 帧协议,支持多 profile 多用户并行测试、并发压测。当需要调试 REST/WS 接口、运行集成测试、压力测试、或新增命令时使用。
aim 的网关域。对应 `gateway` 模块。
SOC 職業分類に基づく
| name | aim-database-migration |
| description | AIM 数据库迁移规范与 Docker Compose 集成。当修改 migration SQL 文件、新增迁移、修改 docker-compose.yaml 的 migrate 服务、或排查迁移失败时使用。 |
AIM 使用 PostgreSQL + sqlc 栈,迁移文件在 app/{auth,logic}/rpc/model/migrations/ 以及 app/attachment/model/migrations/ 下,由 Docker Compose 的 *-migrate init 容器调用 deploy/scripts/migrate-postgres.sh 执行。脚本会显式创建数据库,并按 NNN_*.sql 字典序执行目录内所有 SQL,避免在 Compose command 中硬编码迁移文件列表。
涉及数据库契约层(migration/sqlc)时,按域选择对应参考:
references/auth-model.mdreferences/logic-model.md所有 DDL 必须可重复执行。 Docker volume 持久化后,docker compose up --force-recreate 会重新执行 migrate 容器,如果 SQL 不幂等就会失败。
-- ✅ 正确:CREATE TABLE IF NOT EXISTS
CREATE TABLE IF NOT EXISTS messages (
id BIGINT PRIMARY KEY,
...
);
-- ❌ 错误:缺少 IF NOT EXISTS,第二次执行必报 "relation already exists"
CREATE TABLE messages (
id BIGINT PRIMARY KEY,
...
);
-- ✅ 正确:CREATE INDEX IF NOT EXISTS
CREATE INDEX IF NOT EXISTS idx_messages_conv_time ON messages(conversation_id, created_at DESC);
-- ❌ 错误:缺少 IF NOT EXISTS
CREATE INDEX idx_messages_conv_time ON messages(conversation_id, created_at DESC);
适用范围:
CREATE TABLE → 必须 IF NOT EXISTSCREATE INDEX → 必须 IF NOT EXISTSCREATE EXTENSION → 必须 IF NOT EXISTS(已遵守)ALTER TABLE ADD COLUMN → 使用 IF NOT EXISTSALTER TABLE ADD CONSTRAINT → 先检查 pg_constraint 或用 DO 块NNN_description.sql
000 开始,顺序递增000_extensions.sql 固定用于 PostgreSQL 扩展新增迁移文件后必须同步:
NNN_xxx.sql 文件(幂等 DDL)NNN_ 前缀;Compose 通过 deploy/scripts/migrate-postgres.sh 自动按序执行,无需手工追加 commandsqlc generate 重新生成 model 代码go test ./app/{module}/rpc/... 验证auth-migrate → deploy/scripts/migrate-postgres.sh → app/auth/rpc/model/migrations/*.sql
logic-migrate → deploy/scripts/migrate-postgres.sh → app/logic/rpc/model/migrations/*.sql
attachment-migrate → deploy/scripts/migrate-postgres.sh → app/attachment/model/migrations/*.sql
migrate-postgres.sh 的关键约定:
AIM_DATABASE 指定目标库(如 aim_auth / aim_logic)。POSTGRES_HOST / POSTGRES_PORT / POSTGRES_USER / POSTGRES_PASSWORD 连接 PostgreSQL。POSTGRES_DB 初始化副作用。$AIM_MIGRATIONS_DIR/*.sql,NNN_ 前缀保证执行顺序。psql -v ON_ERROR_STOP=1,任一迁移失败即退出。||/&& 链。011_xxx.sql 等文件后不需要修改 Compose command。当前脚本仍没有 schema_migrations 表,依赖 SQL 自身幂等来支持重复执行。后续如引入 goose / golang-migrate,需要同步更新本 Skill 和 deploy/scripts/。
修改迁移相关内容时,逐项确认:
IF NOT EXISTS(CREATE TABLE / CREATE INDEX / CREATE EXTENSION)NNN_ 前缀,确保 glob 排序正确deploy/scripts/migrate-postgres.sh 仍使用显式数据库创建逻辑,未退回 Compose 内联 shellsqlc generate 已重新执行go test 通过references/auth-model.mdreferences/logic-model.md