标签: liquibase-sql

Liquibase:错误:CREATE DATABASE 无法在事务块内运行

我正在尝试使用 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

postgresql liquibase liquibase-sql

7
推荐指数
2
解决办法
2665
查看次数

liquibase“splitStatements”有什么好处?

正在使用的 liquibase 版本 - org.liquibase:liquibase-core:3.8.2。(不是专业版)

Liquibase 文档(12)如下所述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

  1. 目前尚不完全清楚splitStatements增加了什么好处 - 即,如果 SQL 语句是否在(结束分隔符)上分割;,会有什么区别 - 即,如果语句在单个查询或多个查询中执行 - 数据库不会处理“ ;” 无论如何基于的东西。这似乎是必须理解的。——有人可以举个例子吗?
  2. 我当前的项目有splitStatements:false. 禁用 splitStatements …

liquibase liquibase-sql

5
推荐指数
0
解决办法
2576
查看次数

如何在插入语句中使用 liquibase 参数?

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 spring-boot liquibase-sql

5
推荐指数
1
解决办法
1071
查看次数

了解 liquibase 中 logicalFilePath 的行为

我的一个变更集有一个不正确的逻辑文件路径(两个变更集意外地具有相同的逻辑文件路径)并且在现有变更集中编辑逻辑文件路径时,liquibase 更新失败并出现重复列错误,这意味着 liquibase 认为变更集不是执行并重新运行它。

liquibase 是否根据“EXECUTED”标志或“id”、“author”和“logicalFilePath”的组合来识别变更集是否已被执行?

另外,在现有变更集的逻辑文件路径不正确的情况下,我如何纠正错误

database-migration liquibase liquibase-sql

2
推荐指数
1
解决办法
1036
查看次数

无法读取架构文档“http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd”

我已经在 J​​enkins 中安装了 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”执行此操作。请帮忙。

liquibase jenkins jenkins-pipeline liquibase-sql

1
推荐指数
1
解决办法
4989
查看次数

通过 Jenkins 运行但从终端运行时 Liquibase 校验和验证失败

我从 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)

changeset liquibase jenkins jenkins-pipeline liquibase-sql

1
推荐指数
1
解决办法
9060
查看次数