Liquibase generateChangeLog命令不会生成更改集

问题描述 投票:3回答:1

按照these指令,在我现有的PostgreSQL数据库上执行generateChangeLog命令,结果文件不包含更改集标记。也许我误会了一些东西,但是我认为到目前为止对数据库的修改(创建的表等)已经在这里总结了,这就是“使您看起来像一直在使用Liquibase一样” “选项。

如果这不是正确的假设,并且如果我直接对要描述为changeSet的数据库进行修改,那么如何使用Liquibase命令行将这些变更集添加到文件中?

编辑:

这里是逐步执行generateChangeLog和更新的示例:

./liquibase --driver=org.postgresql.Driver --classpath=postgresql-42.2.4.jar --changeLogFile=changelog1.xml --url="jdbc:postgresql://localhost:5432/my_database" --username=postgres --password=postgres --logLevel=debug generateChangeLog

输出:

DEBUG 7/20/18 8:15 PM:liquibase:已连接至postgres @ jdbc:postgresql:// localhost:5432 / my_database

[DEBUG 7/20/18 8:15 PM:liquibase:将自动提交从true设置为false

[DEBUG 7/20/18 8:15 PM:liquibase:1532117738554的计算校验和为2d79fcfb744a18b475eac6c1d1bd804d]

DEBUG 7/20/18 8:15 PM:liquibase:执行QUERY数据库命令:SELECT c.relname AS SEQUENCE_NAME from pg_class c在c.relnamespace = pg_namespace.oid上加入pg_namespace在哪里c.relkind ='S'和nspname = 'public'和c.oid不在(从pg_depend d中选择d.objid,其中d.refobjsubid> 0)

INFO 7/20/18 8:15 PM:liquibase:changelog1.xml不存在,正在创建

DEBUG 7/20/18 8:15 PM:liquibase:MissingObjectChangeGenerator类型顺序:liquibase.structure.core.Catalog liquibase.structure.core.Schema liquibase.structure.core.Sequence liquibase.structure.core.StoredProcedure liquibase.structure .core.Table表liquibase.structure.core.Column liquibase.structure.core.PrimaryKey liquibase.structure.core.UniqueConstraint liquibase.structure.core.Index liquibase.structure.core.ForeignKey liquibase.structure.core.View

DEBUG 7/20/18 8:15 PM:liquibase:UnexpectedObjectChangeGenerator类型顺序:liquibase.structure.core.Catalog liquibase.structure.core.ForeignKey liquibase.structure.core.Schema liquibase.structure.core.StoredProcedure liquibase.structure .core.UniqueConstraint liquibase.structure.core.View liquibase.structure.core.Table表liquibase.structure.core.PrimaryKey liquibase.structure.core.Column liquibase.structure.core.Index liquibase.structure.core.Sequence

DEBUG 7/20/18 8:15 PM:liquibase:ChangedObjectChangeGenerator类型顺序:liquibase.structure.core.Catalog liquibase.structure.core.ForeignKey liquibase.structure.core.Schema liquibase.structure.core.Sequence liquibase.structure .core.StoredProcedure liquibase.structure.core.Table表liquibase.structure.core.Column liquibase.structure.core.PrimaryKey liquibase.structure.core.UniqueConstraint liquibase.structure.core.Index liquibase.structure.core.ViewLiquibase'generateChangeLog'成功

此时,在我的本地PostgreSQL服务器中,my_database具有2个模式,一个命名为my_schema(包含11个表,其中填充了我的应用程序正在使用的数据),另一个命名为public。公众没有桌子。

正在运行的liquibase更新:

./liquibase --driver=org.postgresql.Driver --classpath=postgresql-42.2.4.jar --changeLogFile=changelog1.xml --url="jdbc:postgresql://localhost:5432/my_database" --username=postgres --password=postgres --logLevel=debug update

返回:

[DEBUG 7/20/18 8:21 PM:liquibase:已连接至postgres @ jdbc:postgresql:// localhost:5432 / my_database

DEBUG 7/20/18 8:21 PM:liquibase:将自动提交从true设置为false

[DEBUG 7/20/18 8:21 PM:liquibase:执行QUERY数据库命令:从public.databasechangeloglock中选择count(*)

DEBUG 18/7/20 8:21 PM:liquibase:创建数据库锁定表DEBUG 7/20/18 8:21 PM:liquibase:执行EXECUTE数据库命令:CREATE TABLE public.databasechangeloglock(ID INT NOT NULL,LOCKED BOOLEAN NOT NULL,LOCKSTAFFED TIMESTAMP WITH TIME ZONE,LOCKEDBY VARCHAR(255),CONSTRAINT PK_DATABASECHANGELOGLOCK PLOCK (ID))

DEBUG 18/7/20下午8:21:liquibase:创建的数据库锁表名称为:public.databasechangeloglock

[DEBUG 7/20/18 8:21 PM:liquibase:执行QUERY数据库命令:从public.databasechangeloglock中选择count(*)

[DEBUG 7/20/18 8:21 PM:liquibase:初始化数据库锁定表

DEBUG 7/20/18 8:21 PM:liquibase:执行EXECUTE数据库命令:从public.databasechangeloglock删除]

[DEBUG 7/20/18 8:21 PM:liquibase:执行EXECUTE数据库命令:INSERT INTO public.databasechangeloglock(ID,LOCKED)值(1,FALSE)

DEBUG 7/20/18 8:21 PM:liquibase:执行QUERY数据库命令:从public.databasechangeloglock WHERE ID = 1的SELECT LOCKED]

[DEBUG 7/20/18 8:21 PM:liquibase:锁定数据库

DEBUG 7/20/18 8:21 PM:liquibase:执行UPDATE数据库命令:UPDATE public.databasechangeloglock SET LOCKED = TRUE,LOCKEDBY = '10 .0.2.15(10.0.2.15)',LOCKGRANTED ='2018-07-20 20:21:26.650'WHERE ID = 1 AND LOCKED = FALSEINFO 7/20/18 8:21 PM:liquibase:成功获取更改日志锁定

DEBUG 7/20/18 8:21 PM:liquibase:解析XML实体名称='null',publicId ='null',baseURI ='null',systemId ='http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd'

DEBUG 7/20/18 8:21 PM:liquibase:打开jar:文件:/home/vagrant/Documents/liquibase.jar!/liquibase/parser/core/xml/dbchangelog-3.5.xsd作为liquibase / parser / core / xml / dbchangelog-3.5.xsd

DEBUG 7/20/18 8:21 PM:liquibase:计算1532118089029的校验和为cfbe2a0b147c646104f738103a68b2fd

DEBUG 7/20/18 8:21 PM:liquibase:创建数据库更改日志表

INFO 7/20/18 8:21 PM:liquibase:创建名称为public.databasechangelog的数据库历史表

DEBUG 7/20/18 8:21 PM:liquibase:执行EXECUTE数据库命令:CREATE TABLE public.databasechangelog(ID VARCHAR(255)NOT NULL,AUTHOR VARCHAR(255)NOT NULL,FILENAME VARCHAR(255)NOT NULL,不带时区的DATEEXECUTED TIMESTAMP非空,ORDEREXECUTED INT非空,EXECTYPE VARCHAR(10)非空,MD5SUM VARCHAR(35),DESCRIPTION VARCHAR(255),COMMENTS VARCHAR(255),TAG VARCHAR(255),LIQUIBASE VARCHAR(20) ,上下文VARCHAR(255),标签VARCHAR(255),DEPLOYMENT_ID VARCHAR(10))

DEBUG 7/20/18 8:21 PM:liquibase:执行QUERY数据库命令:从public.databasechangelog中选择count(*)

INFO 7/20/18 8:21 PM:liquibase:从public.databasechangelog中读取

[DEBUG 7/20/18 8:21 PM:liquibase:执行QUERY数据库命令:SELECT * FROM public.databasechangelog ORDER BY DATEEXECUTED ASC,ORDEREXECUTED ASC

[DEBUG 7/20/18 8:21 PM:liquibase:执行QUERY数据库命令:从public.databasechangeloglock中选择count(*)

[DEBUG 7/20/18 8:21 PM:liquibase:释放数据库锁

DEBUG 18/7/20下午8:21:liquibase:执行UPDATE数据库命令:UPDATEpublic.databasechangeloglock SET LOCKED = FALSE,LOCKEDBY = NULL,LOCKGRANTED = NULL,其中ID = 1

INFO 7/20/18 8:21 PM:liquibase:成功释放更改日志锁定

Liquibase更新成功

现在在Public模式下,有2个表,databasechangelog和databasechangeloglock。 databasechangelog为空,但databasechangeloglock包含ID为1的一行,并且“锁定的布尔值”列为“ FALSE”。

按照这些说明,在我现有的PostgreSQL数据库上执行generateChangeLog命令,结果文件不包含更改集标记。也许我误会了一些东西,但是我想...

liquibase
1个回答
2
投票

我意识到我没有指定正确的架构。我在数据库示例中有2个,“ public”和“ my_schema”,而Liquibase显然默认为public模式。

使用以下内容成功生成更改集:


1
投票

我有类似的问题。

我已经有一个现有的数据库,并且其中包含表和数据。

© www.soinside.com 2019 - 2024. All rights reserved.