初始化和升级
初始化是指首次安装,升级是指在现有的表结构上进行升级,例如添加新的字段。
准备工作
在开始之前,你需要安装 migrate
工具,可以在
https://github.com/golang-migrate/migrate/releases
找到对应你的操作系统和 CPU 架构的版本下载安装。
初始化
在第一次安装 ReactGO 时,需要初始化数据库,所有的初始化是通过脚本完成的,放在
migrate
目录中,有几个 shell 脚本和几个 sql 文件。
这里以 Sqlite 为例,从终端窗口 cd
到 migrate
目录,然后运行:
./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
脚本。
注意事项
虽然我们尽可能的全自动化,但目前还是不能完全避免手工操作:
- MySQL 缺少
bytea
数据类型,PostgreSQL 缺少mediumblob
数据类型, 导致很难找到一个让这 2 个数据库都满意的二进制数据类型。所以,你需要打开***.sql
文件根据你使用的数据库修改一下,文件中有注释。 - 所有
migrate-xxx.sh
脚本都在文件中使用reactgo
这个数据库名称, 你要改名只能直接修改脚本文件。 - 除了 Sqlite 外,其他的数据库都需要你先创建好数据库,例如 PostgreSQL,
你需要先使用
createdb
创建数据库,然后再运行脚本。
升级
升级是指你已经部署了系统,然后需要对系统的数据表结构进行升级。当然你可以直接使用数据库的
alter
语句对数据库进行修改,但是那样不太优秀(主要是随意性太强,缺少规范和跟踪)。
在 ReactGO 中,升级的操作和初始化是一样的,也是在 migrate
目录运行
migrate-xxx.sh
脚本。
具体的操作方法请参考 migrate 的文档。