自动回滚不适用于 Postgresql 上的 liquibase

Posted

技术标签:

【中文标题】自动回滚不适用于 Postgresql 上的 liquibase【英文标题】:Auto rollback not working for liquibase on Postgresql 【发布时间】:2017-07-31 05:08:36 【问题描述】:

我正在使用 postgres 数据库:

Maven pom.xml:

<project
    xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
        http://maven.apache.org/maven-v4_0_0.xsd">`enter code here`

    <modelVersion>4.0.0</modelVersion>`enter code here`

    <groupId>testing</groupId>
    <artifactId>CubeGenerator</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>CubeGenerator</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>org.liquibase.ext</groupId>
            <artifactId>liquibase-postgresql</artifactId>
            <version>3.0</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.liquibase</groupId>
                <artifactId>liquibase-maven-plugin</artifactId>
                <version>3.5.0</version>
                <configuration>
                    <changeLogFile>/pgdb/lb/changelog.postgresql.sql</changeLogFile>
                    <url>jdbc:postgresql://localhost:5432/deldb</url>
                    <username>rolldel</username>
                    <password>rolldel</password>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>updateSQL</goal>
                            <goal>futureRollbackSQL</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Liquibase.properties:

[postgres@pgtest lb]$ cat liquibase.properties
driver: org.postgresql.Driver
classpath: /pgdb/lb/postgresql-42.1.1.jre6.jar
changeLogFile:/pgdb/lb/changelog.postgresql.sql
url: jdbc:postgresql://localhost:5432/deldb
username: rolldel
password: rolldel

更新日志:

--liquibase formatted sql

--changeset postgres:1-1
CREATE TABLE action (acn_id numeric(10) NOT NULL, trg_id numeric(10) NOT NULL, act_id numeric(10) NOT NULL, acn_configured_pig_id numeric(10) NOT NULL, acn_running_pig_id numeric(10), acn_name VARCHAR(255) NOT NULL, acn_order_no numeric(10) NOT NULL, system_generated_fl CHAR(1), acn_delete_fl CHAR(1) NOT NULL, acn_version_id numeric(10) NOT NULL, ptn_id numeric(10) NOT NULL);

CREATE TABLE action_pin (anp_id numeric(10) NOT NULL, cmp_id numeric(10) NOT NULL, act_id numeric(10) NOT NULL, anp_name VARCHAR(255) NOT NULL, anp_input_fl CHAR(1) NOT NULL, anp_order_no numeric(10) NOT NULL, system_generated_fl CHAR(1), anp_delete_fl CHAR(1) NOT NULL, anp_version_id numeric(10) NOT NULL, ptn_id numeric(10) NOT NULL);

CREATE TABLE action_pin_connection (apc_id numeric(10) NOT NULL, apc_from_acn_id numeric(10), apc_from_anp_id numeric(10), apc_from_trg_id numeric(10), apc_from_trp_id numeric(10), apc_to_acn_id numeric(10) NOT NULL, apc_to_anp_id numeric(10) NOT NULL, system_generated_fl CHAR(1), apc_delete_fl CHAR(1) NOT NULL, apc_version_id numeric(10) NOT NULL, ptn_id numeric(10) NOT NULL);

liquibase 更新正在运行,但 liquibase 回滚不起作用。

如果我在更改日志中添加--rollback drop table,那么它就可以工作了。

但是,为什么 auto rollback 不适用于创建表 SQL?

【问题讨论】:

【参考方案1】:

对我来说,那个变更日志看起来不像是有效的 YAML。

Liquibase 无法为用 SQL 编写的更改自动创建回滚。这将需要一个 SQL 解析器(针对每种 SQL 方言)。

如果您希望 Liquibase 自动生成回滚,请使用 createTable 更改。

【讨论】:

我创建了 xml 格式的变更日志并且自动回滚工作。谢谢劳伦兹。【参考方案2】:

指定要回滚的标签将回滚在应用给定标签后针对目标数据库执行的所有更改集。我认为有合适的答案: 你可以参考下面的***链接dbf回答 https://***.com/a/35370538/8363483

【讨论】:

我尝试使用标签 deldb=# UPDATE DATABASECHANGELOG SET TAG = 'version_1.1' WHERE DATEEXECUTED = (SELECT MAX(DATEEXECUTED) FROM (SELECT DATEEXECUTED FROM DATABASECHANGELOG) AS X); [postgres@pgtest lb]$ java -jar liquibase.jar rollbackSQL version_1.0 运行 Liquibase 时出现意外错误:未创建 liquibase.change.core.RawSQLChange 的逆向

以上是关于自动回滚不适用于 Postgresql 上的 liquibase的主要内容,如果未能解决你的问题,请参考以下文章

Flyway - 自动增量 ID 不适用于 PostgreSQL 中的测试数据

自动保存不适用于 UIManagedDocument 上的 NSUndoManager

自动完成不适用于值数组

回滚不适用于可转换的核心日期实体

Visual Studio 自动完成功能不适用于 html 页面上的 javascript/css

为啥递归联合不适用于 PostgreSQL 中的复合类型