我是liquibase的新手,我读过liquibase文档,但仍未找到,liquibase如何确定数据库的当前版本以及应在update
上应用哪些更改。
例如,如果要考虑来自liquibase站点主页的SQL脚本:
第一次运行update
,sql文件是:
--liquibase formatted sql
--changeset nvoxland:1
create table person (
id int not null primary key,
firstname varchar(80),
lastname varchar(80) not null,
state varchar(2)
);
第二次运行update
,脚本是
--liquibase formatted sql
--changeset nvoxland:1
create table person (
id int not null primary key,
firstname varchar(80),
lastname varchar(80) not null,
state varchar(2)
);
--changeset nvoxland:2
alter table person MODIFY column firstname varchar(8)
第三轮是:
--liquibase formatted sql
--changeset nvoxland:1
create table person (
id int not null primary key,
firstname varchar(80),
lastname varchar(80) not null,
state varchar(2)
);
--changeset nvoxland:2
alter table person MODIFY column firstname varchar(8)
--changeset nvoxland:3
alter table person MODIFY column firstname varchar(10)
第4次运行:
--liquibase formatted sql
--changeset nvoxland:1
create table person (
id int not null primary key,
firstname varchar(80),
lastname varchar(80) not null,
state varchar(2)
);
--changeset nvoxland:2
alter table person MODIFY column firstname varchar(8)
--changeset nvoxland:3
alter table person MODIFY column firstname varchar(10)
--changeset nvoxland:4
alter table person MODIFY column firstname varchar(8)
第五轮是:
--liquibase formatted sql
--changeset nvoxland:1
create table person (
id int not null primary key,
firstname varchar(80),
lastname varchar(80) not null,
state varchar(2)
);
--changeset nvoxland:2
alter table person MODIFY column firstname varchar(8)
--changeset nvoxland:3
alter table person MODIFY column firstname varchar(10)
--changeset nvoxland:4
alter table person MODIFY column firstname varchar(8)
--changeset nvoxland:5
alter table person MODIFY column firstname varchar(15)
第5次update
运行会发生什么以及liquibase将如何确定,第4次运行后数据库版本将为“4”并需要将列修改为15个字符长度?
可能是,liquibase在数据库中添加了一些“版本”表,它会在哪里插入最新版本的应用变更集/补丁?
谢谢!
答案 0 :(得分:3)
http://www.liquibase.org/documentation/index.html说:
变更集由"作者"唯一标识。和" id"属性以及changelog文件的位置,是Liquibase跟踪执行的单位。当Liquibase运行时,它会在DATABASECHANGELOG表中查询标记为已执行的变更集,然后在changelog文件中执行尚未执行的所有变更集。