接下来我们将回到一些更具体的代码实践中,并一步步在greenlight数据库中创建一个movie表。
为此,我们只需使用psql工具然后执行必要的CREATE TABLE语句。但是,我们将探讨如何使用SQL迁移来创建表(更一般地说,如何管理整个项目中数据库模式更改)。
你将学习到:
- SQL迁移背后的原则以及它们为什么有用。
- 如何使用命令行工具以编程方式管理数据库模式的更改。
SQL迁移概述
如果你不熟悉SQL迁移的概念,作为一个非常高级的概念它是这样的工作的:
1、对数据库模式进行的每一次更改(如创建表、添加列或删除未使用的索引),都要创建一对迁移文件。一个文件用于“up”迁移【对应升级】,其中包含实现更改所需的SQL语句,另一个文件是“down”迁移,其中包含逆转(或回滚)更改所需的SQL语句。
2、每对迁移文件按顺序编号,通常是0001、0002、0003…或者使用Unix时间戳,表示将迁移应用到数据库的顺序。
3、您可以使用某种工具或脚本,根据迁移文件中的SQL语句执行或回滚数据库。该工具跟踪哪些迁移已经生效,以便执行必要的SQL语句。
使用迁移来管理你的数据库模式,而不是自己手动执行SQL语句,有几个好处:
- 数据库模式(及其演变和更改)完全由“up”和“down”SQL迁移文件描述。由于这些文件只是包含一些SQL语句,所以可以在版本控制系统中将它们与其他代码一起跟踪。
- 通过运行“up”迁移,可以在另一台机器上精确地复制当前数据库模式。当您需要在不同的环境(开发、测试、生产等)中管理和同步数据库模式时,这是一个很大的帮助。
- 如果有必要,可以通过应用适当的“down”迁移回滚数据库模式更改。
安装迁移工具
为了在我们的项目中管理SQL迁移,我们将使用migrate命令行工具(它本身是用Go编写的)。
不同操作系统的详细安装说明可以在这里找到,但在macOS上,你应该能够使用以下命令进行安装:
brew install golang-migrate
在Linux和Windows上,最简单的方法是下载二进制文件并将其拷贝到系统路径上的某个位置。例如,在Linux上:
$ curl -L https://github.com/golang-migrate/migrate/releases/download/v4.14.1/migrate.linux-amd64.tar.gz | tar xvz
$ mv migrate.linux-amd64 $GOPATH/bin/migrate
在继续之前,请检查它是否可用,在您的机器上运行,尝试使用-version命令行参数执行migrate二进制文件。它输出当前版本号,如下所示:
$ migrate -version
4.14.1
下一篇我们将介绍如何使用migrate工具进行项目的数据库迁移。