返回市场
迁移至模式

迁移至模式

作者:alc62 星标更新:2025-08-11

项目介绍

mig2schema

一个从PostgreSQL迁移文件中提取数据库模式的工具,使用MCP通过运行临时数据库来发现模式。当你在一个包含大量迁移文件的项目上工作时非常有用。

概述

mig2schema 接受一个包含PostgreSQL迁移文件(.up.sql.down.sql)的目录,并在运行迁移后提取生成的数据库模式。它使用testcontainers启动一个临时的PostgreSQL实例,运行迁移,然后提取模式信息。

安装

go build -o mig2schema

使用方法

信息模式(默认)

显示可读的模式信息:

./mig2schema /path/to/migrations

提取模式

输出可以用于重新创建模式的SQL CREATE语句:

./mig2schema -e /path/to/migrations
./mig2schema --extract /path/to/migrations

PostgreSQL镜像配置

默认情况下,该工具使用 postgres:16-alpine。你可以指定不同的PostgreSQL Docker镜像:

./mig2schema --pg-image postgres:17-alpine /path/to/migrations
./mig2schema --pg-image pgvector/pgvector:pg16 /path/to/migrations

模式提取提供者

该工具支持多个提供者用于提取模式:

  • native(默认):使用SQL查询到information_schema的内置提供者
  • pg_dump:使用PostgreSQL的pg_dump实用程序进行完整的DDL提取
# 列出可用的提供者
./mig2schema --list-providers

# 使用native提供者(默认)
./mig2schema -p native -e /path/to/migrations

# 使用pg_dump提供者(需要pg_dump在PATH中,仅支持提取模式)
./mig2schema -p pg_dump -e /path/to/migrations

注意:pg_dump提供者仅与提取模式(-e)一起工作,并提供更完整的模式信息,包括外键、序列和所有约束。

迁移文件格式

该工具期望迁移文件遵循命名约定:

  • 001_create_users.up.sql - 迁移向上文件
  • 001_create_users.down.sql - 迁移向下文件(可选)

按文件名字母顺序执行文件。

示例

信息模式示例

./mig2schema examples/migrations

# 输出:
# === 数据库模式 ===
# 表:users
# 列:
#   - id integer NOT NULL (主键)
#   - email character varying NOT NULL
#   - username character varying NOT NULL
# 索引:
#   - idx_users_email on (email)
#   - users_email_key on (email) (唯一)

提取模式示例

使用native提供者:

./mig2schema -e examples/migrations

# 输出:
# create table users (
#     id integer not null default nextval('users_id_seq'::regclass),
#     email varchar(255) not null,
#     username varchar(255) not null,
#     primary key (id)
# );
#
# create index idx_users_email on users (email);
# create unique index users_email_key on users (email);

使用pg_dump提供者(更完整的输出):

./mig2schema -p pg_dump -e examples/migrations

# 输出包括:
# - 完整的CREATE TABLE语句
# - 对于序列的ALTER TABLE语句
# - 外键约束
# - 所有索引及其正确语法
# - 默认值和约束

要求

  • Docker(用于testcontainers)
  • Go 1.24.2+
  • PostgreSQL客户端工具(可选,pg_dump提供者需要)

在Claude Code中使用

此工具可以用作Claude Code中的MCP(模型上下文协议)服务器:

claude mcp add mig2schema -- {path}/mig2schema --mcp

其中 {path} 是mig2schema二进制文件的完整路径(例如,/Users/username/go/bin/mig2schema)。

添加后,Claude Code可以使用以下工具:

extract_schema

使用pg_dump从迁移文件中提取数据库模式以获得完整的DDL输出。

参数:

  • migration_directory(必需):包含迁移文件的目录路径
  • format(可选):输出格式 - "sql"(默认且唯一选项)
  • postgres_image(可选):要使用的PostgreSQL Docker镜像(默认:"postgres:16-alpine")

在Claude Code中的示例用法:

使用extract_schema工具,migration_directory="./migrations"

注意:MCP模式始终使用pg_dump提供者,并输出SQL DDL以获得最完整和准确的模式提取,包括外键、序列和所有约束。

validate_migrations

验证迁移文件而不运行它们。

参数:

  • migration_directory(必需):包含迁移文件的目录路径
  • postgres_image(可选):要使用的PostgreSQL Docker镜像(默认:"postgres:16-alpine")