按照这些说明,在我现有的 PostgreSQL 数据库上执行 generateChangeLog 命令,生成的文件不包含变更集标签。也许我误解了一些东西,但我认为到目前为止对数据库的修改(创建的表等)已经在这里总结了,这就是“让它看起来像你一直在使用 Liquibase “ 选项。
如果这不是一个正确的假设,并且如果我直接对要被描述为变更集的数据库进行修改,那么我如何使用 Liquibase 命令行将这些变更集添加到文件中?
编辑:
以下是逐步执行 generateChangeLog 和 update 的示例:
./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
Run Code Online (Sandbox Code Playgroud)
输出:
DEBUG 7/20/18 8:15 PM:liquibase:连接到 postgres@jdbc:postgresql://localhost:5432/my_database
DEBUG 7/20/18 8:15 PM:liquibase:将自动提交设置为 false 从 true
调试 7/20/18 下午 8:15:liquibase:1532117738554 的计算校验和为 2d79fcfb744a18b475eac6c1d1bd804d
DEBUG 7/20/18 8:15 PM:liquibase:执行 QUERY 数据库命令:SELECT c.relname AS SEQUENCE_NAME FROM pg_class c join pg_namespace on c.relnamespace = pg_namespace.oid WHERE c.relkind='S' AND nspname = 'public ' AND c.oid not in (select d.objid FROM pg_depend d where d.refobjsubid > 0)
信息 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.View Liquibase '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
Run Code Online (Sandbox Code Playgroud)
返回:
DEBUG 7/20/18 8:21 PM:liquibase:连接到 postgres@jdbc:postgresql://localhost:5432/my_database
DEBUG 7/20/18 8:21 PM:liquibase:将自动提交设置为 false 从 true
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 数据库命令:CREATE TABLE public.databasechangeloglock (ID INT NOT NULL, LOCKED BOOLEAN NOT NULL , LOCKGRANTED TIMESTAMP WITHOUT TIME ZONE, LOCKEDBY VARCHAR(255), CONSTRAINT PK_DATABASECHANGELOGLOCK PRIMARY KEY (ID))
DEBUG 7/20/18 8:21 PM: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 数据库命令:DELETE FROM public.databasechangeloglock
DEBUG 7/20/18 8:21 PM:liquibase:执行 EXECUTE 数据库命令:INSERT INTO public.databasechangeloglock (ID, LOCKED) VALUES (1, FALSE)
DEBUG 7/20/18 8:21 PM:liquibase:执行 QUERY 数据库命令:SELECT LOCKED FROM public.databasechangeloglock WHERE ID=1
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-0207-2 21:26.650' WHERE ID = 1 AND LOCKED = FALSE INFO 7/20/18 8:21 PM:liquibase:成功获取更改日志锁
DEBUG 7/20/18 下午 8:21: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:file:/home/vagrant/Documents/liquibase.jar!/liquibase/parser/core/xml/dbchangelog-3.5.xsd 作为 liquibase/parser/core/ xml/dbchangelog-3.5.xsd
调试 7/20/18 下午 8:21:liquibase:1532118089029 的计算校验和为 cfbe2a0b147c646104f738103a68b2fd
DEBUG 7/20/18 8:21 PM:liquibase:创建数据库更改日志表
信息 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 WITHOUT TIME ZONE NOT NULL, ORDEREXECUTED INT NOT NULL, EXECTYPE VARCHAR(10) NOT NULL, MD5SUM VARCHAR(35), description VARCHAR(255), COMMENTS VARCHAR(255), TAG VARCHAR(255), LIQUIBASE VARCHAR(20), CONTEXTS VARCHAR(255)、标签 VARCHAR(255)、DEPLOYMENT_ID VARCHAR(10))
DEBUG 7/20/18 8:21 PM:liquibase:执行 QUERY 数据库命令:从 public.databasechangelog 中选择计数(*)
信息 7/20/18 晚上 8:21: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 7/20/18 8:21 PM:liquibase:执行 UPDATE 数据库命令:UPDATE public.databasechangeloglock SET LOCKED = FALSE,LOCKEDBY = NULL,LOCKGRANTED = NULL WHERE ID = 1
INFO 7/20/18 8:21 PM:liquibase:成功释放变更日志锁
Liquibase 更新成功
现在在 Public 模式下,有 2 个表,databasechangelog 和 databasechangeloglock。databasechangelog 为空,但 databasechangeloglock 包含 id 为 1 和“locked boolean” col“FALSE”的一行。
我意识到我没有指定正确的模式。我在数据库示例中有 2 个“public”和“my_schema”,Liquibase 显然默认为公共模式。
使用以下命令后成功生成更改集:
./liquibase --driver=org.postgresql.Driver --classpath=postgresql-42.2.4.jar --changeLogFile=changelog.xml --url="jdbc:postgresql://localhost:5432/my_database?currentSchema=my_schema" --username=postgres --password=postgres --liquibaseSchemaName=my_schema generateChangeLog
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3247 次 |
| 最近记录: |