数据库版本控制liquibase

数据库版本控制liquibase

文章目录

    • 数据库版本控制liquibase
      • 一、liquibase介绍
        • 1、什么是liquibase
        • 2、liquibase的优点
        • 3、liquibase的基本概念
        • 4、官网地址
        • 5、Liquibase目录结构
      • 二、liquibase使用
        • 1、数据库配置
        • 2、数据库产生表
        • 3、文件配置
        • 4、使用方式代码

一、liquibase介绍

1、什么是liquibase

liquibase是一个数据库变更的版本控制工具。项目中通过liquibase解析用户编写的liquibase的配置文件,生成sql语句,并执行和记录。执行是根据记录确定sql语句是否曾经执行过,和配置文件里的预判断语句确定sql是否执行。liquibase开源版使用Apache 2.0协议。
官网地址:https://www.liquibase.org/

2、liquibase的优点

1、配置文件支持SQL、XML、JSON 或者 YAML2、版本控制按序执行3、可以用上下文控制sql在何时何地如何执行。4、支持schmea的变更5、根据配置文件自动生成sql语句用于预览6、可重复执行迁移7、可插件拓展8、可回滚9、可兼容14种主流数据库如oracle,mysql,pg等,支持平滑迁移10、支持schema方式的多租户(multi-tenant)

3、liquibase的基本概念

1、changeSet 执行sql的并记录、版本控制的最小单元。即每条changeSet生成1条执行记录,版本控制是基于执行记录的。 2、changelog 即执行记录。由changeSet执行后产生的记录。记录默认保存在databasechangelog表中,此表由liquibase自动生成。包含id,author,filename,dateexcuted,orderexcuted,exectype,md5sum等字段。 3、databasechangeloglock。liquibase的锁表。liquibase在执行前更新此表的locked为true,执行完liquibase的工作,将locked更新为false,适合集群使用

4、官网地址

https://www.liquibase.org/

5、Liquibase目录结构

Liquibase的changelog文件放在resources/db/changelog目录下,如下图所示,我们只需要追加更改这些文件来更新数据库。db.changelog-master.xml是主文件,只用于包含文件,一般不做更改。根据修改类型:增加,修改,删除表对象和数据导入分别在各自文件添加。数据文件以csv格式放到csv目录下。

二、liquibase使用

1、数据库配置
# 数据源
spring:
  datasource:
    pig:
      type: com.zaxxer.hikari.HikariDataSource
      driver-class-name: org.postgresql.Driver
      username: postgres
      password: 123456
      jdbc-url: jdbc:postgresql://${POSTGRE_HOST:pig-postgre}:${POSTGRE_PORT:5432}/${POSTGRE_DB:pig}?currentSchema=pig
      liquibase:
        enabled: true
        change-log: classpath:/db/liquibase/db.changelog-master.xml

db.changelog-master.xml文件配置:


<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
        http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">

	
	<includeAll path="./init-sql/" relativeToChangelogFile="true"/>

	
    <includeAll path="./sqlchangelog/" relativeToChangelogFile="true"/>

databaseChangeLog>

2、数据库产生表

在这里插入图片描述

CREATE TABLE "pig_config"."databasechangelog" (
  "id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
  "author" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
  "filename" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
  "dateexecuted" timestamp(6) NOT NULL,
  "orderexecuted" int4 NOT NULL,
  "exectype" varchar(10) COLLATE "pg_catalog"."default" NOT NULL,
  "md5sum" varchar(35) COLLATE "pg_catalog"."default",
  "description" varchar(255) COLLATE "pg_catalog"."default",
  "comments" varchar(255) COLLATE "pg_catalog"."default",
  "tag" varchar(255) COLLATE "pg_catalog"."default",
  "liquibase" varchar(20) COLLATE "pg_catalog"."default",
  "contexts" varchar(255) COLLATE "pg_catalog"."default",
  "labels" varchar(255) COLLATE "pg_catalog"."default",
  "deployment_id" varchar(10) COLLATE "pg_catalog"."default"
)
;

ALTER TABLE "pig_config"."databasechangelog" 
  OWNER TO "cloud_dev_pg";
CREATE TABLE "pig_config"."databasechangeloglock" (
  "id" int4 NOT NULL,
  "locked" bool NOT NULL,
  "lockgranted" timestamp(6),
  "lockedby" varchar(255) COLLATE "pg_catalog"."default",
  CONSTRAINT "databasechangeloglock_pkey" PRIMARY KEY ("id")
)
;

ALTER TABLE "pig_config"."databasechangeloglock" 
  OWNER TO "cloud_dev_pg";
3、文件配置

如下所示SQL方式:

--liquibase formatted sql

--changeset test:20230607_1
-- 2023年6月7日  崔辛福 告警通知规则新增组织名称代码
ALTER TABLE "aio_event"."rule_config" ADD COLUMN org_name varchar(100);
COMMENT ON COLUMN "aio_event"."rule_config"."org_name" is '机构昵称';

--changeset test:20230612_1
-- 2023年6月12日  崔辛福 值守报告推送新增日周月cron表达式
ALTER TABLE "aio_event"."report_push_set" ADD COLUMN day_cron varchar(50);
COMMENT ON COLUMN "aio_event"."report_push_set"."day_cron" is '日报接收时间表达式';

ALTER TABLE "aio_event"."report_push_set" ADD COLUMN week_cron varchar(50);
COMMENT ON COLUMN "aio_event"."report_push_set"."week_cron" is '周报接收时间表达式';

ALTER TABLE "aio_event"."report_push_set" ADD COLUMN month_cron varchar(50);
COMMENT ON COLUMN "aio_event"."report_push_set"."month_cron" is '月报接收时间表达式';

说明例如:

–changeset test:20230612_1
– 2023年6月7日 说明
具体说明:
changset 为一条记录标识
test作者信息
20230612_1 执行id
– 2023年6月7日 为用户自己添加的注释,不会参与入库和其他操作,只是纯粹的注释一下

如下所示XML方式:


<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" 
                   xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" 
                   xmlns:xsi="h

你可能感兴趣的:(数据库,开源中间件,数据库,java,postgresql)