跳到主要內容

Goose - a database migration tool for Go 資料庫遷移工具






Goose


Go 語言下,好用的資料庫遷移工具。特別是跟同事協同開發時,做好資料庫版本管理的好幫手。除了用 SQL 外,你也可以自己產生對映的 Go 程式。


Goose is a database migration tool. Manage your database schema by creating incremental SQL changes or Go functions.

github repo. (程式庫連結)
https://github.com/pressly/goose


Install (安裝)


$ go get -u github.com/pressly/goose/cmd/goose

Usage (語法)


kz@KZ ~/Blogger/bloggerfiles (master) $ goose 
Usage: goose [OPTIONS] DRIVER DBSTRING COMMAND

Drivers:
    postgres
    mysql
    sqlite3
    redshift

Examples:
    goose sqlite3 ./foo.db status
    goose sqlite3 ./foo.db create init sql
    goose sqlite3 ./foo.db create add_some_column sql
    goose sqlite3 ./foo.db create fetch_user_data go
    goose sqlite3 ./foo.db up

    goose postgres "user=postgres dbname=postgres sslmode=disable" status
    goose mysql "user:password@/dbname" status
    goose redshift "postgres://user:password@qwerty.us-east-1.redshift.amazonaws.com:5439/db" status

Options:
  -dir string
     directory with migration files (default ".")

Commands:
    up                   Migrate the DB to the most recent version available
    up-to VERSION        Migrate the DB to a specific VERSION
    down                 Roll back the version by 1
    down-to VERSION      Roll back to a specific VERSION
    redo                 Re-run the latest migration
    status               Dump the migration status for the current DB
    version              Print the current version of the database
    create NAME [sql|go] Creates new migration file with next version


Create (建立遷移)

Create a new SQL migration.

如果是第一次使用 goose 版本應為 0.
If this is your first time running goose, the following version number of goose should be 0.
$ goose mysql "username:password@tcp(127.0.0.1:3306)/testdb?parseTime=true" version
goose: version 0

建立遷移
Create a new SQL migration.
$ goose create add_some_column sql
Created new file: 00001_add_some_column.sql

下指令可以看到目錄下 goose 產生的檔案
kz@KZ ~/Blogger/bloggerfiles/migration (master %) $ ls -alh
total 8
drwxr-xr-x  3 kz  staff    96B Nov  4 00:22 .
drwxr-xr-x  6 kz  staff   192B Nov  4 00:13 ..
-rw-r--r--  1 kz  staff   165B Nov  4 00:22 00001_add_some_column.sql

編輯剛產生的 00001_add_some_column.sql
可以看到 goose 幫我們產生的 template













加一些我們想要的語法進去












Up (套用遷移)

Apply all available migrations.


成功的話,可以看到回傳 OK & 版本號
$ goose mysql "username:password@tcp(127.0.0.1:3306)/testdb?parseTime=true" up
OK    00001_add_some_column.sql
goose: no migrations to run. current version: 1

Status - After Up command (顯示 Up 後的遷移狀態)

Print the status of all migrations.
$ goose mysql "username:password@tcp(127.0.0.1:3306)/testdb?parseTime=true" status
    Applied At                  Migration
    =======================================
    Sat Nov  4 00:52:16 2017 -- 00001_add_some_column.sql

Version - After Up command (顯示 Up 後的遷移版本)

Print the current version of the database
$ goose mysql "username:password@tcp(127.0.0.1:3306)/testdb?parseTime=true" version
goose: version 1




down (覆原遷移)

Roll back a single migration from the current version.


成功的話,可以看到回傳 OK & 版本號
$ goose mysql "username:password@tcp(127.0.0.1:3306)/testdb?parseTime=true" down
OK    00001_add_some_column.sql


Status - After Down command (顯示 Down 後的遷移狀態)

Print the status of all migrations.
$ goose mysql "username:password@tcp(127.0.0.1:3306)/testdb?parseTime=true" status
    Applied At                  Migration
    =======================================
    Pending                  -- 00001_add_some_column.sql

Version - After Down command (顯示 Down 後的遷移版本)

Print the current version of the database
$ goose mysql "username:password@tcp(127.0.0.1:3306)/testdb?parseTime=true" version
goose: version 0

就這樣,是不是很方便~
That's it.

留言

這個網誌中的熱門文章

Google - Cloud SQL for PostgreSQL adds high availability and replication (Google 雲端 PostgreSQL 資料庫新增了 HA & Replicas )

就在本月, 等了好一陣子的 Cloud SQL  for PostgreSQL 終於加上了 High availability & Replicas 機制; 雖然目前還是 beta 版,不過已經讓人開心,想叫老闆跟同事,趕快使用看看。 相關文件 https://cloudplatform.googleblog.com/2017/11/Cloud-SQL-for-PostgreSQL-adds-high-availability-and-replication.html 另外,也今年夏季也加入了 19 項 PostgreSQL extensions 相關文件 https://cloudplatform.googleblog.com/2017/08/Cloud-SQL-for-PostgreSQL-updated-with-new-extensions.html

Arduino 切換開關點亮 LED - 處理 Bounce 問題

原來機械式開關還存在所謂的「彈跳 (Bounce)」問題 解決方式: 1. 延遲時間 (輪詢式) 2. 使用程式庫 Bounce2       官方出了新版的 library Bounce2      參考官方文件作法,調整為 #include <Bounce2.h> #define SERIAL_BAUDRATE 19200 #define LED_PIN 11 #define SWITCH_PIN 7 Bounce bouncer = Bounce(); boolean led_status; void setup() {   Serial.begin(SERIAL_BAUDRATE);   pinMode(LED_PIN, OUTPUT);   pinMode(SWITCH_PIN, INPUT);   // After setting up the button, setup the object   bouncer.attach(SWITCH_PIN);   bouncer.interval(5);      led_status = LOW;   digitalWrite(LED_PIN, led_status); } void loop() {      if(bouncer.update() == true && bouncer.read() == HIGH){     led_status = !led_status;     digitalWrite(LED_PIN, led_status);   } } 3. 延遲時間 (硬體中斷) 參考資料: 1. Arduino 輕鬆入門-範例分析與實作設計  葉難 著  博碩  2015.07 初版3刷 !!! 支持台灣本土作者、支持 TAAZE 讀冊生活 !!!