如何使用 RedGate docker 生成迁移脚本?

Posted

技术标签:

【中文标题】如何使用 RedGate docker 生成迁移脚本?【英文标题】:How to generate migration script using RedGate docker? 【发布时间】:2021-11-19 08:11:20 【问题描述】:

我能够使用 RedGate docker 在 linux 上比较两个 SQL Server 数据库:

docker run --rm --interactive --tty\
    redgate/sqlcompare:14 /IAgreeToTheEULA \
    /s1:sql_docker_1,1433 /db1:Customers /u1:SA /p1:pass \
    /s2:sql_docker_2,1533 /db2:Customers /u2:SA /p2:pass

但是,它只向我展示了一个非常粗粒度的比较(只告诉我这两个表不一样,但没有向我展示它们的差异)。

我可以通过这种方式获得更多关于比较的信息吗?我需要列级和索引级的比较。

另外,如何生成迁移脚本?

【问题讨论】:

【参考方案1】:

感谢您使用 Redgate SQL 比较!

完全免责声明 - 我是该产品的开发人员。

要生成报告,您需要做两件事:

1.) 像这样挂载一个目录:

--mount type=bind,src="C:\Users\x\Documents",dst=/scripts

它将您的 Windows 文档文件夹挂载到 docker 容器中的文件夹 /scripts。

2.) 向 SQL 比较添加两个附加参数以生成报告类型:

/report:"/scripts/report.html" /reporttype:Html

然后要生成迁移脚本,您必须像上面那样挂载一个目录,并为 SQL 比较添加一个附加参数:

/scriptfile:"/scripts/script.sql"

这将为您提供一个可以执行的 SQL 脚本文件

这两个步骤为我提供了一个交互式 HTML 报告,该报告显示了我在源和目标之间所做的列更改差异:

还有一个 SQL 脚本文件

我的最终命令(已编辑)是:

docker run --rm --interactive --tty --mount type=bind,src="C:\Users\x\Documents",dst=/scripts redgate/sqlcompare:14 /IAgreeToTheEULA /s1:x.example.com,1433 /db1:compare_source /u1:sa /p1:xxx /s2:x.example.com,1433 /db2:compare_target /u2:sa /p2:xxx /scriptfile:"/scripts/script.sql" /report:"/scripts/report.html" /reporttype:Html

报告的开关来自https://documentation.red-gate.com/sc/using-the-command-line/switches-used-in-the-command-line#Switchesusedinthecommandline-/include:%3Ctype%3E:%3Cregularexpression%3E,生成脚本来自https://documentation.red-gate.com/sc/using-the-command-line/using-the-command-line-on-linux

【讨论】:

以上是关于如何使用 RedGate docker 生成迁移脚本?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Docker 在 SQL Server 数据库上运行 EF Core 迁移?

利用 Docker 备份迁移数据库

docker如何迁移数据目录

使用 Docker-Compose 时如何执行 Django 数据库迁移?

如何使用 Github-actions 在 Docker 上使用 Mysql 运行 Prisma 迁移

如何在 Dockerized GraphQL + Postgres 设置中运行 Prisma 迁移?