一个从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
默认情况下,该工具使用 postgres:16-alpine。你可以指定不同的PostgreSQL Docker镜像:
./mig2schema --pg-image postgres:17-alpine /path/to/migrations
./mig2schema --pg-image pgvector/pgvector:pg16 /path/to/migrations
该工具支持多个提供者用于提取模式:
# 列出可用的提供者
./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语句
# - 外键约束
# - 所有索引及其正确语法
# - 默认值和约束
此工具可以用作Claude Code中的MCP(模型上下文协议)服务器:
claude mcp add mig2schema -- {path}/mig2schema --mcp
其中 {path} 是mig2schema二进制文件的完整路径(例如,/Users/username/go/bin/mig2schema)。
添加后,Claude Code可以使用以下工具:
使用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以获得最完整和准确的模式提取,包括外键、序列和所有约束。
验证迁移文件而不运行它们。
参数:
migration_directory(必需):包含迁移文件的目录路径postgres_image(可选):要使用的PostgreSQL Docker镜像(默认:"postgres:16-alpine")