【发布时间】:2022-06-22 08:15:22
【问题描述】:
我的项目有问题。
我正在使用 liquibase (v4.8.0) 并在 changelog-master.xml 上包含一个 SQL 文件,其中包含该代码:
CREATE SCHEMA IF NOT EXISTS public;
SET search_path TO public;
当我使用 PostgreSQL 运行我的应用程序时,它可以正常工作,但是当我运行使用 H2 数据库 (h2 v2.1.210) 的测试时,它会因该错误而失败:
引起:org.springframework.beans.factory.BeanCreationException: 在类路径中定义名称为“liquibase”的 bean 创建错误 资源 [org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration$LiquibaseConfiguration.class]: 调用 init 方法失败;嵌套异常是 liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException:迁移失败 变更集 db/schema.sql::raw::includeAll: 语法 SQL 语句“SET [*]search_path TO public;”中的错误;预期的 ”@, 自动提交、排他性、忽略大小写、密码、SALT、模式、数据库、 排序,集群,DATABASE_EVENT_LISTENER,ALLOW_LITERALS, DEFAULT_TABLE_TYPE、SCHEMA、CATALOG、SCHEMA_SEARCH_PATH、 JAVA_OBJECT_SERIALIZER、IGNORE_CATALOGS、会话、事务、时间、 NON_KEYWORDS, DEFAULT_NULL_ORDERING, LOG"; SQL 语句:SET 公开搜索路径; [42001-210] [失败的 SQL:(42001)创建模式 如果不存在,则公开;
我不明白为什么它会失败,而且我也没有在网上找到任何帮助。 提前感谢您的帮助:)
【问题讨论】:
-
好吧,它失败了,因为 H2 没有搜索路径的概念。您需要标记您的变更集,以便它只为 Postgres 运行。
-
H2 有
SCHEMA_SEARCH_PATH: h2database.com/html/commands.html#set_schema_search_path -
感谢@EvgenijRyazanov 的回答,但是,当我使用旧版本的 liquibase ( v4.3.5 ) 和 h2 ( v1.4.200 ) 时,它可以工作。你有解释吗?
标签: postgresql h2 liquibase