Liquibase / Spring Boot / Postgres - 模式名称不起作用

Posted

技术标签:

【中文标题】Liquibase / Spring Boot / Postgres - 模式名称不起作用【英文标题】:Liquibase / Spring Boot / Postgres - Schema name not working 【发布时间】:2019-04-20 18:32:49 【问题描述】:

我正在使用 Spring Boot 2.0.2、Liquibase 3.5.5 和 PostgreSQL 10。我能够成功地在数据库和我的 JPA 实体之间创建差异。但是,当我将这些更改应用于数据库时,它会将更改应用于 PostgreSQL 中的默认“公共”模式。但是,我希望它将更改应用于不同的架构“dbo”。

我尝试了多种方法使其无法成功。我真的不想编辑每个变更集并手动添加架构名称。

这是我尝试过的:

<plugin>
                <groupId>org.liquibase</groupId>
                <artifactId>liquibase-maven-plugin</artifactId>
                <version>3.5.5</version>
                <configuration>
                    <changeLogFile>src/main/resources/db/changelog/db.changelog-master.yaml</changeLogFile>
                    <diffChangeLogFile>src/main/resources/db/changelog/$maven.build.timestamp_changelog.xml</diffChangeLogFile>
                    <propertyFile>src/main/resources/liquibase.properties</propertyFile>
                    <defaultSchemaName>dbo</defaultSchemaName>
                    <driver>org.postgresql.Driver</driver>
                    <url>jdbc:postgresql://localhost:5432/FCV2Db?currentSchema=dbo</url>
                    <username>postgres</username>
                    <password>fastcode</password>
                    <referenceUrl>hibernate:spring:com.nfinity.fastcode.domain?dialect=org.hibernate.dialect.PostgreSQL9Dialect</referenceUrl>
                    <verbose>true</verbose>
                    <logging>debug</logging>
                    <dropFirst>false</dropFirst>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.liquibase.ext</groupId>
                        <artifactId>liquibase-hibernate5</artifactId>
                        <version>3.6</version>
                    </dependency>
                    <dependency>
                        <groupId>org.javassist</groupId>
                        <artifactId>javassist</artifactId>
                        <version>3.23.1-GA</version>
                    </dependency>
                    <dependency>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-data-jpa</artifactId>
                        <version>2.0.2.RELEASE</version>
                    </dependency>
                    <dependency>
                        <groupId>javax.validation</groupId>
                        <artifactId>validation-api</artifactId>
                        <version>2.0.1.Final</version>
                    </dependency>
                </dependencies>
            </plugin>

是的,我尝试将架构名称作为配置属性和 JDBC Url 连接,因为单独使用其中任何一个都不起作用。同时使用两者也不起作用。

有人成功解决了这个问题吗?

【问题讨论】:

【参考方案1】:

我升级到最新版本的 PostgreSQL 驱动程序 42.2.5 并将驱动程序的 Url 与 ?currentSchema=schemaName 一起使用,它可以工作。

示例:jdbc:postgresql://localhost:5432/FCV2Db?currentSchema=dbo

【讨论】:

以上是关于Liquibase / Spring Boot / Postgres - 模式名称不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在Spring Boot 2下激活后启动liquibase。

使用 Spring-Boot 启动时的 Liquibase 迁移不起作用

Spring boot - 在启动时禁用 Liquibase

Spring Boot 和 Liquibase 示例

spring boot 中的多个 liquibase 配置

如果运行 spring boot 并让 liquibase 自动执行迁移,则 Liquibase databasechangelog 表存储相对路径