我正在尝试使用 liquibase 在 PostgreSQL 上创建一个数据库。这是我的 dbchangelog 文件
<?xml version="1.0" encoding="UTF-8"?>
<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.8.xsd">
<changeSet author="testuser" id="3">
<sql dbms="postgresql"
endDelimiter=";">
CREATE DATABASE testdb;
</sql>
</changeSet>
</databaseChangeLog
Run Code Online (Sandbox Code Playgroud)
当我尝试从我的项目目录运行时,liquibase update我得到
Unexpected error running Liquibase: ERROR: CREATE DATABASE cannot run inside a transaction block [Failed SQL: (0) CREATE DATABASE testdb]
Run Code Online (Sandbox Code Playgroud)
我看到在 PostgreSQL 中设置 AUTOCOMMIT = ON 可以解决这个问题。但此方法仅适用于 PostgreSQL 9.4 及以下版本。但我正在使用 AWS RDS PostgreSQL 9.6.8
正在使用的 liquibase 版本 - org.liquibase:liquibase-core:3.8.2。(不是专业版)
Liquibase 文档(1和2)如下所述splitStatements(默认为 true)
设置为 false 时,不会在 ; 和 GO 上使用 Liquibase split 语句。如果未设置则默认为 true
和
当设置为 false 时,删除 ; 和 GO 上的 Liquibase split 语句。默认值为:true。
我发现的另一个有用的软件帖子 - In Liquibase is it OK to have an empty line on splitstatements?
;我理解 - 当 splitStatements 为 true 时,liquibase 会拆分和上的语句GO
splitStatements增加了什么好处 - 即,如果 SQL 语句是否在(结束分隔符)上分割;,会有什么区别 - 即,如果语句在单个查询或多个查询中执行 - 数据库不会处理“ ;” 无论如何基于的东西。这似乎是必须理解的。——有人可以举个例子吗?splitStatements:false. 禁用 splitStatements …Spring boot中有一个liquibase参数,比如说:
spring.liquibase.parameters.val1 = value1
Run Code Online (Sandbox Code Playgroud)
我想在 sql 文件中使用这个参数,如下所示:
insert into table1 (name, value) values ("nameOfValue", ${val1});
Run Code Online (Sandbox Code Playgroud)
不幸的是,到目前为止唯一有效的组合是添加 3 个单引号 - '''${val1}'''(给出'value1')并substring删除第一个和最后一个单引号。
是否有更简洁的方法在 SQL 变更集文件的 INSERT 语句中使用 liquibase 参数?
我的一个变更集有一个不正确的逻辑文件路径(两个变更集意外地具有相同的逻辑文件路径)并且在现有变更集中编辑逻辑文件路径时,liquibase 更新失败并出现重复列错误,这意味着 liquibase 认为变更集不是执行并重新运行它。
liquibase 是否根据“EXECUTED”标志或“id”、“author”和“logicalFilePath”的组合来识别变更集是否已被执行?
另外,在现有变更集的逻辑文件路径不正确的情况下,我如何纠正错误
我已经在 Jenkins 中安装了 Liquibase runner 1.3.0 插件,并尝试执行执行“diffChangeLog”命令后得到的 liquibase 更改日志脚本文件。在执行脚本文件时,出现Failed to read schema document ' http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd '异常。我已经检查了我的更改日志文件,它具有下面提到的标题。
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd
http://www.liquibase.org/xml/ns/pro
http://www.liquibase.org/xml/ns/pro/liquibase-pro-3.8.xsd
http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">
Run Code Online (Sandbox Code Playgroud)
但现在在这里,当我将标头中两个位置的“3.8”替换为“3.5”时,它就成功执行了。我希望仅使用“3.8”执行此操作。请帮忙。
我从 Linux(Centos) 终端运行以下命令,
mvn --settings /home/centos/.m2/jenkins/liquibase-settings.xml -e resources:resources -Pdev -Dliquibase.promptOnNonLocalDatabase=false -Dliquibase.defaultSchemaName=MYDEV_SCHEMA liquibase:updateSQL liquibase:update -Dsettings.security=/home/centos/.m2/jenkins/liquibase-security-settings.xml -Dfile.encoding=UTF-8
Run Code Online (Sandbox Code Playgroud)
一切都很顺利。
当我通过詹金斯运行时,同样的事情,进入下面,
[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:4.2.0:updateSQL (default-cli) on project project-db:
[ERROR] Error setting up or running Liquibase:
[ERROR] Validation Failed:
[ERROR] 16 change sets check sum
[ERROR] db/changelog/ABCD.xml::1234-23::User1 was: 8:67913d9505606eeaaa4998fd594a8ccf but is now: 8:9d985650b579319df50f30732d66909c
[ERROR] db/changelog/ABCD.xml::1234-78::User1 was: 8:3b3babd5d0712f846402af13ede528f7 but is now: 8:0214bf10acfd160fc6f7d709edab2f2e
[ERROR] db/changelog/ABCD.xml::1234-142::User1 was: 8:5e3c8fc77fc87f0e9740c0bff717f579 but is now: 8:53094dd8c32ec71b8d76fdd71009c548
[ERROR] db/changelog/ABCD.xml::1234-200::User1 was: 8:c40ec5c77f7b10961ee550edd756f51f but is now: 8:9bef09eb0681f7ea7bf827b6ac136433
[ERROR] db/changelog/ABCD.xml::1234-923::User1 was: 8:747cbcbda155679dd2fc1bfcc40991c4 but …Run Code Online (Sandbox Code Playgroud)