问题标签 [liquibase-sql]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
437 浏览

jhipster - 即使在更新 master.xml 中的更改日志后,liquibase 校验和验证错误仍然存​​在

我在 jhipster 微服务应用程序中使用 postgresql。我正在关注 jhipster 文档,如下所示。

使用 Maven liquibase:diff 目标更新数据库 如果您选择在开发中使用 MySQL、MariaDB 或 PostgreSQL,则可以使用 ./mvnw liquibase:diff 目标自动生成更改日志。

如果您使用基于磁盘的持久性运行 H2,则此工作流程尚未完美运行,但您可以开始尝试使用它(并向我们发送反馈!)。

Liquibase Hibernate 是一个 Maven 插件,在你的 pom.xml 中配置,并且独立于你的 Spring application.yml 文件,所以如果你改变了默认设置(例如,改变了数据库密码),你需要修改这两个文件.

这是开发工作流程:

修改您的 JPA 实体(添加字段、关系等) 编译您的应用程序(这适用于已编译的 Java 代码,所以不要忘记编译!)运行 ./mvnw liquibase:diff (或 ./mvnw compile liquibase :diff 之前编译)在您的 src/main/resources/config/liquibase/changelog 目录中创建一个新的“更改日志”查看此更改日志并将其添加到您的 src/main/resources/config/liquibase/master.xml文件,因此它会在您下次运行应用程序时应用

更新实体并遵循上述文档后,我在 master.xml 文件中添加了生成的更改日志文件。

运行应用程序时我仍然收到 liquibase 校验和验证错误。下面是屏幕截图 在此处输入图像描述

请帮我解决这个问题。

0 投票
0 回答
780 浏览

liquibase - 从 3.5.5 迁移到 3.6.0 或更高版本时,Liquibase 更新非常慢

我在 3.5.5 版本中使用 liquibase,我的脚本运行速度很快,大约 20 秒从头开始执行我的所有脚本。

最近我已经将我的版本更新到 3.6.3,现在,全球执行时间已超过 20 分钟!我的脚本没有任何改变,如果我回到 3.5.5 需要 20 秒。我还测试了 3.8.0(今天的最后一个版本)。

我已将日志级别设置为 DEBUG,并在 3.5.5 中执行如下脚本:

与 3.8.0 相同:

正如你所看到的,这个案例成功地从 20 毫秒到 9274 毫秒!如果我添加所有其他我通过到 20 分钟。在 3.8.0 中,我看到很多liquibase.snapshot.DatabaseSnapshot...

我在更新日志中看不到任何可以解释这一点的东西,有人有同样的问题吗?我可以停用此版本中的某些内容吗?

谢谢

0 投票
1 回答
328 浏览

liquibase - Liquibase 回滚在 Sprintboot 2.0 中不起作用

liquibase 回滚如何与 springboot 应用程序配合使用?将不胜感激您的意见。

这是我尝试过的 - 我正在 Oracle 中的变更集中创建 TableA 和 TableB。

TableB 已经存在于数据库中,我希望 liquibase 回滚 TableA,因为在创建 TableB 时变更集失败,但是 liquibase 创建 TableA 并失败并出现以下错误并且从不执​​行回滚块,这很奇怪:

Liquibase 配置:

ddl.sql

0 投票
0 回答
2381 浏览

windows - 如何将命令行参数传递给 liquibase.properties 文件

我有一个包含以下内容的文件liquibase.properties

我正在使用命令 liquibase update 并且数据库更改正在部署在 staticDB 数据库上

我想将动态数据库名称与 liquibase update 命令一起传递,以便我可以在多个数据库上部署数据库更改

我已经更改了url:属性文件,如下所示

我试过使用类似的命令

但是我无法正确执行 liquibase 命令,因为我遇到了错误

请告诉我如何在运行 liquibase update 命令时传递动态数据库名称

0 投票
0 回答
216 浏览

oracle - PL/SQL 和 SQL 脚本在一个带有 liquibase for Oracle 的 sqlFile 中

我们正在尝试使用 Liquibase 3.8.0 在同一个 liquibase 变更集中运行存储过程和 SQL 语句,但出现以下错误。

运行 Liquibase 时出现意外错误:ORA-06550:第 12 行,第 2 列:PLS-00103:遇到符号“/”

我已经尝试过:

  • endDelimiter="\n/\s*\n|\n/\s*$"
  • endDelimiter="\n/\s*(\n|$)"
  • endDelimiter="\n/\s*\n|\n/\s*$"
  • endDelimiter="/"
  • endDelimiter="/"
0 投票
1 回答
1406 浏览

liquibase - Liquibase - 生成更改日志

我希望 Liquibase 从此数据库“测试”中生成更改日志。可能吗?

我已经有一个现有的数据库,里面有它的表和数据。

现在,我希望 Liquibase 从这个数据库“测试”中生成一个变更日志。可能吗?

这是我的命令,但它不起作用。

我不使用任何密码。

该错误与 --changeLogFile=C:\db.changelog.xml 有关

我想,Liquibase 将引用我的数据库“测试”,并在文件夹 C 中生成名为“db.changelog.xml”的更改日志。

我错了哪一部分?我错过了什么吗?

或者,Liquibase 不打算从现有数据库生成更改日志?

或者,Liquibase 的目的是仅从变更日志生成数据库?反之亦然?

0 投票
0 回答
162 浏览

liquibase - Liquibase 不适用于更改 Spring Boot 配置文件

我将 Liquibase 与 SQL Server 2014 一起用于我的 Spring Boot 项目。我试图在启动时填充几个表并在那里更新基本信息。

一切正常,但是当我更改 Spring Boot 配置文件时,liquibase 失败,抱怨表存在。我尝试完全删除数据库,并希望 Liquibase 为我创建它。它仍然抱怨该表存在。我不明白为什么。如果我对一个 Spring Boot 配置文件做同样的事情,它可以无缝运行,但问题是当我更改 Spring Boot 配置文件时,你能帮忙吗?

0 投票
1 回答
429 浏览

sql - 对于 Liquibase createView,有没有办法存储子搜索的值?

我正在尝试使用 liquiBase yaml 更改日志文件在 SQL Server 中创建一个视图,其中每一行如下所示:

并且有三张桌子

  • EMPLOYEE -employee_id、first_name、last_name
  • 工作 - job_id、employee_id、start_date、end_date、provider_id
  • 分配 - assignment_id、job_id、employee_id、start_date、end_date、provider_id

  • employee_id给定的行

  • provider_id是最新的provider_id_job_idend_dateemployee_id
  • days_remaining是距离最后一个分配结束天的天employee_idprovider_id
  • employed_dates是以上所有的assignment_id串联employee_idprovider_id

到目前为止我的代码:

我有两个问题:

  1. 是否可以避免重复计算 provider_id(下面的代码)三次?

    由于 liquibase 中不支持变量、变量表或 CTE,我还能怎么做呢?

  2. 是否可以修改上述内容,使每个employee_id 列在多行中(对于与此employee_id 关联的每个provider_id)?UNION 不起作用,因为 liquibase 不支持循环或某种 for-each 构造,并且 CROSS JOINS 不起作用,因为它将employee_ids 与每个provider_id 配对,无论它们是否关联。

0 投票
3 回答
1775 浏览

mysql - 强制 liquibase 使用 current_timestamp 而不是 now()

将 liquibase-core:3.6.3 与 MySQL 一起使用。

我第一次必须对列使用时间戳(3)而不是默认时间戳。由于我的时间戳列不可为空,如果未设置 DEFAULT 值,则添加 current_timestamp(直接在 MySQL 中或使用 liquibase)。

不是我面临 liquibase 生成的 SQL 不使用 CURRENT_TIMESTAMP 但 NOW() 作为要调用的默认函数的问题。这使得时间戳(3)不可能。

有没有办法强制 liquibase 在输出中使用 CURRENT_TIMESTAMP 而不是 NOW()?

输出: CREATE TABLE db_name.table_name(id INT unsigned NOT NULL, updated timestamp DEFAULT NOW() NOT NULL, CONSTRAINT PK_RULE_STATE PRIMARY KEY (id));

这工作正常。但是,更改timestamptimestamp(3)

输出: CREATE TABLE db_name.table_name(id INT unsigned NOT NULL, updated timestamp(3) DEFAULT NOW() NOT NULL, CONSTRAINT PK_RULE_STATE PRIMARY KEY (id));其中 NOW() 不是有效值。

使用相同的输出defaultValueDate

如果我使用defaultValue: current_timestamp()liquibase 足够聪明,可以将它检测为一个函数,它不使用文字字符串,但是,这仍然是 timestamp(3) 的一个重要值。最后,使用

产生输出:

CREATE TABLE db_name.table_name(id INT unsigned NOT NULL, updated timestamp(3) DEFAULT DEFAULT 'current_timestamp(3)' NOT NULL, CONSTRAINT PK_RULE_STATE PRIMARY KEY (id));

我最后的机会是根本没有设置默认值。这很好用,除了事实上,正如这个人很久以前所说的那样,MySQL 添加了ON UPDATE CURRENT_TIMESTAMP(3)并且我无法避免它。


那么,有没有办法强制使用 current_timestamp(3) 或作为备份计划,以防止 MySQL 生成该ON UPDATE部分?

0 投票
2 回答
606 浏览

postgresql - 如何将数据库模式从数据库 A 复制到数据库 B

我使用 liquibase 变更集创建了一个 Postgresql 数据库 A。现在,我正在创建一个应用程序,该应用程序允许创建一个新的数据库 B 并实时从数据库 A 复制架构,包括 liquibase 变更集,因为该数据库以后仍可以更新。请注意,在数据库 A 中复制模式时,可能已经更新,从而使基本变更集过时。

我的主要问题是:

  1. 如何使用 liquibase 将 PostgreSQL 模式 x 从数据库 a(在运行时动态生成)复制到 b?数据库 b 可能在另一台服务器上。
  2. 如果 liquibase 无法实现,还有哪些其他工具或方法可以实现这一点?

--

让我添加更多上下文:

  1. 我们使用 liquibase 变更集初始化一个新数据库的模式。
  2. 我们可以在运行时向数据库添加一个新表和字段。或者在应用程序运行期间。例如,我们将新表 people 添加到数据库 a 的模式中,该表最初不在变更集中。这也是使用 liquibase 类完成的。因此变更集被添加到 databasechangelog 表中。
  3. 现在,我们创建一个新的数据库 b。
  4. 我们想将数据库 a 的模式导入到 b 中,使用 people 表。

我希望这很清楚。

谢谢。