使用程序来管理资料库(DB Migrate) (Day27)

以下内容同步更新於
https://kevinyay945.com/smart-home-tutorial/027/

在这个之前的程序,都是先到资料库那边下语法建好表,然後再到程序这边新增需要的属性,但这个会有个问题是,如果有一天你需要到新的环境将你的程序部署起来,或是你需要两个月前的资料库型态,这时候就会发生你不知道之前执行了什麽样的sql语法,不晓得两个月前的资料库长得怎麽样(在你资料库没有定期备份的情况下)
因此,需要有个机制可以将资料库的状态也那纳入git的版本控制

在这边,我使用到的是
https://github.com/golang-migrate/migrate
来帮我们进行资料库的版本控制
没有选择使用gorm的migrate而是直接使用语法的原因主要是因为资料库如果需要用一些gorm没有写到的extension,还是得把这些extension放到程序中,所以才会直接选择使用语法来进行资料库的表的版本控制

而这个migrate的工具的使用方式还蛮简单的
https://github.com/golang-migrate/migrate/blob/master/MIGRATIONS.md
在你需要的地方放上他指定规则的sql档案

{version}_{title}.up.{extension}
{version}_{title}.down.{extension}

他的version要持续变多,第一个是1,第二个就是2,当然你也可以直接跳10,只要数字变多就可以了
接着,关於up/down的部分,因为在这种版本控制呢,会出现说你今天把原本的程序升级到v2.0.0版,却发生了很大的bug,需要退回到v1.9.7版,那你的资料库也会需要将资料变成v1.9.7的形状,所以up跟down基本上是要相辅相成的,如果up有创表(create table...),那down就要删表(drop table ...)

他的教学也写得蛮详尽的,如果有需要可以点进他的github阅读他的readme喔

而下面是这次的写的过成和程序码

https://www.youtube.com/watch?v=98v_rdLQdYs

https://github.com/kevinyay945/smart-home-backend/tree/v0.6.0


<<:  ISO 27001 资讯安全管理系统 【解析】(八)

>>:  Java 实现自带的 X509TrustManger 介面,忽略证书验证过程,忽略之後任何 https 网站皆能正常访问。

Day12 HTML二

今天的影片内容为介绍HTML语法中,文件输出的应用以及建构完整的网页 以下为影片中有使用到的程序码 ...

[DAY7]制作容器(六)

改成ubuntu的image docker run -it --name cont3-cakephp...

Day25 React useReducer - 另种管理state的方法

useReducer和useState都是用於资料状态管理的Hook, 那我该怎麽区分使用他们的时机...

[13th][Day2] 第一个 Container

Docker 可以提供安全的沙盒环境来做测试, 建构多用户的 PaaS (platform as a...

Day 10 - 智慧城市Go Smart Award 经历(4) - 展览

这是回顾Go Smart Award的最後一集,  整个比赛的内容也在颁奖典礼举行的同时, 配合在...