Skip to main content

初始化和升级

初始化是指首次安装,升级是指在现有的表结构上进行升级,例如添加新的字段。

准备工作

在开始之前,你需要安装 migrate 工具,可以在 https://github.com/golang-migrate/migrate/releases 找到对应你的操作系统和 CPU 架构的版本下载安装。

初始化

在第一次安装 ReactGO 时,需要初始化数据库,所有的初始化是通过脚本完成的,放在 migrate 目录中,有几个 shell 脚本和几个 sql 文件。

这里以 Sqlite 为例,从终端窗口 cdmigrate 目录,然后运行:

./migrate-sqlite.sh up

运行完成后,就完成了数据库的初始化,默认是数据库文件是 /tmp/reactgo.db, 你可以打开 migrate-sqlite.sh 进行修改,这个文件的内容如下:

#!/bin/sh

# 数据库文件路径
dbpath="/tmp/reactgo.db"

# Database connection url to migrate, see:
# https://github.com/golang-migrate/migrate/tree/master/database/sqlite
#
CONNECTION_URL="sqlite://${dbpath}?x-no-tx-wrap=true"

migrate -database "$CONNECTION_URL" -path . $@

其它数据库的初始化方式是一样的,运行对应版本的 migrate-xxx.sh 脚本。

注意事项

虽然我们尽可能的全自动化,但目前还是不能完全避免手工操作:

  1. MySQL 缺少 bytea 数据类型,PostgreSQL 缺少 mediumblob 数据类型, 导致很难找到一个让这 2 个数据库都满意的二进制数据类型。所以,你需要打开 ***.sql 文件根据你使用的数据库修改一下,文件中有注释。
  2. 所有 migrate-xxx.sh 脚本都在文件中使用 reactgo 这个数据库名称, 你要改名只能直接修改脚本文件。
  3. 除了 Sqlite 外,其他的数据库都需要你先创建好数据库,例如 PostgreSQL, 你需要先使用 createdb 创建数据库,然后再运行脚本。

升级

升级是指你已经部署了系统,然后需要对系统的数据表结构进行升级。当然你可以直接使用数据库的 alter 语句对数据库进行修改,但是那样不太优秀(主要是随意性太强,缺少规范和跟踪)。

在 ReactGO 中,升级的操作和初始化是一样的,也是在 migrate 目录运行 migrate-xxx.sh 脚本。

具体的操作方法请参考 migrate 的文档。