AdSense

網頁

2022/5/23

Liquibase sql-format H2建立資料表

使用Liquibase在H2資料庫建立資料表。


範例環境:

  • macOS BigSur version 10.15.5
  • Liquibase 4.10.0


事前要求

參考「Mac 安裝Liquibase by Homebrew」安裝liquibase。


Liquibase設定

Liquibase使用liquibase.properties設定資料庫連線資訊及要套用的changelog。在任意目錄(e.g. liquibase-demo)新增liquibase.properties設定連線到內建H2資料庫的內容如下。

liquibase.properties

# Enter the path for your changelog file.
changeLogFile=changelog.sql

#### Enter the Target database 'url' information  ####
liquibase.command.url=jdbc:h2:tcp://localhost:9090/mem:dev

# Enter the username for your Target database.
liquibase.command.username: dbuser

# Enter the password for your Target database.
liquibase.command.password: letmein


Changelogs

liquibase.properties同目錄建立changelog.sql內容如下。

SQL註解(comment)是Liquibase定義用來辨識要執行的動作:

  • --liquibase formatted sql - 為SQL format changelog內容的必要開頭。
  • --changeset - 下面放要執行的SQL script。格式:
    --changeset author:id attribute1:value1 attribute2:value2 [...]
    • author:id作為changeset的唯一辨識名稱。author可任意命名,通常放修改者或資料表名稱;id僅供辨識不必須是數字且和執行順序無關。

changelog.sql

--liquibase formatted sql

--changeset employee:1
CREATE TABLE employee (
    id int PRIMARY KEY auto_increment NOT NULL,
    name varchar(60) UNIQUE NOT NULL,
    age int,
    create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
)


建立資料表

liquibase.properties所在目錄以命令列輸入liquibase updateliquibase.properties的參數執行changelog.sql的script更新H2資料庫狀態。

~/../liquibase-demo$ liquibase update

在Liquibase內含的H2管理介面可看到產生的DATABASECHANGELOGDATABASECHANGELOGLOCKEMPLOYEE資料表。



或在H2 Shell檢視。輸入SHOW TABLES

sql> SHOW TABLES;
TABLE_NAME            | TABLE_SCHEMA
DATABASECHANGELOG     | PUBLIC
DATABASECHANGELOGLOCK | PUBLIC
EMPLOYEE              | PUBLIC
(3 rows, 3 ms)

輸入SHOW COLUMNS FROM employee檢視EMPLOYEE table schema。


sql> SHOW COLUMNS FROM employee;
FIELD       | TYPE                  | NULL | KEY | DEFAULT
ID          | INTEGER               | NO   | PRI | NULL
NAME        | CHARACTER VARYING(60) | NO   | UNI | NULL
AGE         | INTEGER               | YES  |     | NULL
CREATE_TIME | TIMESTAMP             | NO   |     | CURRENT_TIMESTAMP
(4 rows, 14 ms)

查看DATABASECHANGELOG資料表可看到多了一筆紀錄。

sql> SELECT * FROM databasechangelog;
ID | AUTHOR   | FILENAME      | DATEEXECUTED               | ORDEREXECUTED | EXECTYPE | MD5SUM                             | DESCRIPTION | COMMENTS | TAG  | LIQUIBASE | CONTEXTS | LABELS | DEPLOYMENT_ID
1  | employee | changelog.sql | 2022-05-24 16:43:01.221643 | 1             | EXECUTED | 8:28bb5eee313e523c6f750d4473e7bb0b | sql         |          | null | 4.10.0    | null     | null   | 3381780263
(3 rows, 5 ms)



沒有留言:

AdSense