Liquibase是一个独立于数据库的开源库,用于跟踪,管理和应用数据库更改。它建立在一个简单的前提上:所有数据库更改都以人类可读但可跟踪的形式存储,并检入源代码控制。
我从 XML 文件中的简单 SQL 标记收到以下错误: 错误 liquibase.exception.DatabaseException:“INT”附近的语法不正确。 [失败的 SQL: (102) 开始 声明@MyVariable INT] ...
如果您在使用 Liquibase 时尝试执行脚本在 H2(面向 PostgreSQL 的上下文)上创建功能索引,则会出现可疑错误。 脚本本身如下所示: 如果您在使用 Liquibase 时尝试执行脚本以在 H2(面向 PostgreSQL 的上下文)上创建功能索引,则会出现可疑错误。 脚本本身如下所示: <changeSet id="2" author="..."> <createIndex tableName="test_table" indexName="test_table_id_idx"> <column name="(date_trunc('day', create_date))"/> </createIndex> </changeSet> 错误信息: Syntax error in SQL statement "CREATE INDEX TEST_TABLE_ID_IDX ON TEST_TABLE(([*]DATE_TRUNC('day', CREATE_DATE)))"; expected "identifier"; SQL statement: CREATE INDEX test_table_id_idx ON test_table((date_trunc('day', create_date))) [42001-200] GitHub 上的 PoC 说实话,我不知道这样一个奇怪的脚本补充是从哪里出现的(关于这个[*])。也许 H2 不明白你需要使用哪个字段并替换 Vilcard 或类似的东西。 是的,我知道 H2 和真实 PostgreSQL 的实现中可能存在冲突和差异(如果那样的话,PostgreSQL 脚本执行正确),但我想了解是什么导致了脚本的这种变化。 H2 的错误消息中的[*] 标记了发现语法错误的位置。 H2 不支持表达式索引,只能对列建立索引。 H2 支持计算列上的索引,因此可以使用函数添加计算列,为其建立索引,并在查询中使用此计算列而不是基列上的函数,在这种情况下可以使用此索引。但我认为如果你的主数据库系统是 PostgreSQL,那不是你的本意。如果您仅将 H2 用于某些测试,则从 H2 的变更集中删除此类不兼容索引的创建更为合理。 使用 计算:正确 databaseChangeLog: - changeSet: dbms: postgresql changes: - createIndex: tableName: test_table indexName: test_table_id_idx columns: - column: **computed: true** name: ((create_date)::date)
@CreatedDate 注释 spring 与 Liquibase
我的实体类中有这些字段: 导入 org.springframework.data.annotation.CreatedDate; 导入 org.springframework.data.annotation.LastModifiedDate; @创建日期 私人即时创建日期...
如何链接到 jar 内的 liquibase 变更日志文件?
目前,我有一个多模块maven spring项目。我打算分离一个模块并将其用作 jar 依赖项。该模块具有我的其他模块中的所有 liquibase 更改日志文件
这是我的changelog.sql的第一个版本: -- liquibase 格式化的 sql -- 变更集 kh:1 创建表 test_table (test_id INT, test_column VARCHAR(256), PRIMARY KEY (test_id)) --变更集 kh:2
如何在自定义 liquibase 前提条件中获取 SQL 查询结果?
我正在尝试创建 https://docs.liquibase.com/concepts/changelogs/preconditions.html 中定义的自定义前提条件 和 https://javadocs.liquibase.com/liquibase-core/liquibase/precondition/
Liquibase DATABASECHANGELOGLOCK.LOCKED 列数据类型
尝试将我的数据库从 Oracle 迁移到 Postgres 之后,Liquibase 在设置锁定时遇到问题,因为 LOCKED 列从 NUMBER(1) 转换为 int4 并且更新语句正在使用
在 Liquibase 中运行 customChange 时出现 ClassNotFound 异常
我正在尝试让 Liquibase 使用 customChange 运行自定义脚本,这是我的设置: 变更日志.xml 我正在尝试让 Liquibase 使用 customChange 运行自定义脚本,这是我的设置: 变更日志.xml <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:pro="http://www.liquibase.org/xml/ns/pro" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd 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-latest.xsd"> <changeSet id="1" author="test"> <customChange class="com.example.RunCustomCommand"> </customChange> </changeSet> </databaseChangeLog> Dockerfile FROM liquibase:latest WORKDIR /node-app USER root COPY . . RUN apt update -y RUN apt install default-jdk -y RUN javac -cp /liquibase/internal/lib/liquibase-core.jar RunCustomCommand.java RUN jar cvf run-custom-command.jar RunCustomCommand.class RUN cp /node-app/run-custom-command.jar /liquibase/lib/run-custom-command.jar CMD [ "sh" ] docker-compose.yml version: "3.1" services: db: container_name: db image: postgres:11-alpine ports: - "5432:5432" environment: POSTGRES_PASSWORD: postgres POSTGRES_DB: postgres networks: - test-liqui lobo-liquibase: container_name: test-liquibase depends_on: - db build: context: ./ dockerfile: Dockerfile entrypoint: ["/bin/sh", "-c"] command: - | ls liquibase update --classpath=./run-custom-command.jar --changelog-file=changelog.xml --username=postgres --password=postgres --url=jdbc:postgresql://db:5432/postgres networks: - test-liqui networks: test-liqui: 运行自定义命令.java package com.example; import liquibase.change.custom.*; import liquibase.database.Database; import liquibase.exception.CustomChangeException; import liquibase.exception.SetupException; import liquibase.exception.ValidationErrors; import liquibase.resource.ResourceAccessor; public class RunCustomCommand implements CustomTaskChange { private ResourceAccessor resourceAccessor; @Override public void execute(Database database) throws CustomChangeException { System.out.printf("Hello %s!", "World"); } @Override public String getConfirmationMessage() { return "Custom task executed successfully."; } @Override public void setUp() throws SetupException { // Any setup logic here } @Override public void setFileOpener(ResourceAccessor resourceAccessor) { this.resourceAccessor = resourceAccessor; } @Override public ValidationErrors validate(Database database) { return new ValidationErrors(); } } 这样,我将 RunCustomCommand.java 编译为 run-custom-command.jar 并将其传递给 Liquibase 命令: --classpath=./run-custom-command.jar 但是,当我运行 docker compose up 时,我仍然得到 test-liquibase | ERROR: Exception Primary Class: ClassNotFoundException test-liquibase | ERROR: Exception Primary Reason: com.example.RunCustomCommand test-liquibase | ERROR: Exception Primary Source: PostgreSQL 11.22 test-liquibase | test-liquibase | Unexpected error running Liquibase: com.example.RunCustomCommand 我还尝试将 run-custom-command.jar 复制到 /liquibase/lib 但没有帮助。我对 Java 不熟悉,我将来想做的是从该类运行 Node.js 脚本。 知道我做错了什么吗? 由于文件位于 /liquibase/lib 内,因此不需要 --classpath 参数。尝试删除它。 为什么?您正在复制 liquibase/lib 目录中的文件: RUN cp /node-app/run-custom-command.jar /liquibase/lib/run-custom-command.jar Liquibase 自动将此目录中的所有内容加载到类路径中,如果文件在那里,则无需使用类路径。之后,您使用 --classpath 再次指向它(我相信它应该是 --classpath=./lib/run-custom-command.jar ),所以它可能会导致一些类加载问题,因为文件被加载两次?
如何使用 Liquibase CDI 注入 searchPath 参数
我尝试在使用 Liquibase CDI 时注入 searchPath 参数,但下面的方法似乎都不起作用。由于情况超出我的控制范围,这是我可以修改我的
我正在尝试使以下代码在我的部署中工作: --liquibase 格式化的sql --changeset 测试:1 结束分隔符:/ 为 XXX 创建或替换公共同义词 XXXX; / 将 XXXX 上的执行授予 XX...
使用 liquibase 将数据加载到 postgres 关系表中
我在postgres中有2个关系表,使用liquibase我需要为每2个表插入csv文件中的数据,而不需要对任何id列进行硬编码。我的架构看起来像 表1( 数字 ID, 夫...
Liquibase“回滚到标签机制”也会删除标签记录。怎么会呢?
我的问题很简单,其标题也很不言自明。 我运行 Liquibase 将变更集回滚到 tag ,一切都按预期工作,但后来我意识到标签记录在其本身中......
Liquibase 无法使用 loadUpdateData 插入包含 $$ 的数据
我正在尝试使用 Liquibase 从 csv 读取数据,并且自然地尝试使用 loadUpdateData。我的 csv 有标题列,它是 varchar 某些记录的数据包含 $$ 并且这些记录给出
在 Spring Boot 中使用 Liquibase 时如何指定 liquibase.command.dropAll.requireForce?
我正在使用 Spring Boot 3.3.4 (Liquibase 4.27.0) 并注意到我在日志中得到了这些: 13:33:25.739 I - l.ui INFO:全部删除命令可能会导致对象发生不可恢复的破坏性更改...
当我尝试启动Liquibase(使用Karaf)时,出现以下错误 '无法读取架构文档 http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xml,因为 1) 可能...
liquibase可以在sql中配置占位符吗? 示例代码: 选择 schema.admin_insert('
使用 Liquibase,使用唯一 <createIndex> 和使用具有唯一约束的 <column> 之间有区别吗?
Liquibase 有两种方法将列定义为唯一: 创建表时,在列上使用 : ...
liquibase“splitStatements”有什么好处?
正在使用的liquibase版本 - org.liquibase:liquibase-core:3.8.2。 (不是专业版) Liquibase 文档(1 和 2)在下面介绍了 splitStatements(默认为 true) 设置为 false 则没有
如何修复 liquibase 的给定数据库 URL 可能存在错误的驱动程序
我有一个 jhipster 生成的数据库,我尝试在其中运行以下命令: mvn liquibase:diff 但现在我收到以下错误: 无法执行目标 org.liquibase:liquibase-maven-
我需要在Spring中为两个数据源设置liquibase,目前看来只能设置一个liquibase,你可以选择哪个数据源。