当前位置: 首页 > 知识库问答 >
问题:

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

东方海
2023-03-14

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

我的主要问题是:

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

--

让我添加更多的上下文:

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

我希望这是清楚的。

谢谢。

共有2个答案

颜永怡
2023-03-14

以下是我如何使用LiquibaseJava库解决这个问题的:

1.)将更改日志从源数据库导出到临时文件(XML)中。

Liquibase liquibase = new Liquibase(liquibaseOutFile.getAbsolutePath(), new FileSystemResourceAccessor(), sourceDatabase);
liquibase.generateChangeLog(catalogAndSchema, changeLogWriter, new PrintStream(liquibaseOutFile.getAbsolutePath()), null);

2.)执行临时文件到新的数据源。

Liquibase targetLiquibase = new Liquibase(liquibaseOutFile.getAbsolutePath(), new FileSystemResourceAccessor(), targetDatabase);
Contexts context = new Contexts();
targetLiquibase.update(context);

以下是完整的代码:https://czetsuya-tech.blogspot.com/2019/12/generate-postgresql-schema-using-java.html

陈琪
2023-03-14

使用Liquibase或Flyway等数据库模式迁移工具的要点是拥有一个关于数据库表结构的“可信单一数据源”。您的Liquibase变更集(或Flyway脚本)应该是数据库的可信单一数据源。

如果您在运行时更改数据库的结构,例如添加一个名为 people 的表,超出了迁移工具的范围,那么您违反了游戏规则。您将违背使用架构迁移工具的目的。使用架构迁移工具的目的是通过该工具进行所有架构更改。

如果您需要在生产环境中运行时添加表,您应该将Liquibase变更集(或Flyway脚本)的物理文件放入数据库服务器环境的文件系统中,然后调用Liquibase(或Flyway)来运行迁移。

也许你误解了事件的顺序:

  • 如果您在服务器“A”上构建了数据库,这意味着您安装了Postgres,创建了一个空数据库,然后安装了您精心构建的Liquibase变更集集合,然后在该服务器上运行了Liquibase迁移操作。
  • 当您在服务器“B”上创建数据库时,您应该遵循相同的步骤:安装Postgres,创建一个空数据库,安装相同的Liquibase变更集集合,然后运行Liquibase迁移操作。

或者,如果复制服务器“A”以创建服务器“B”,则该副本应包含完全相同的Liquibase变更集。因此,在复制过程结束时,两个数据库变更集是相同的。

 类似资料:
  • 我的本地机器中有一个MySQL数据库(在XAMPP中),我使用phpMyAdmin访问该数据库。我也有一个网站托管在GoDaddy上。我通常保持脱机状态,并对数据库中存储的数据进行更改。 我想知道如何能够自动复制本地数据库中的更改到GoDaddy的服务器中的更改,或者可以使用单击按钮进行复制。 我看到了一些关于复制的答案,但我无法将数据从本地机器复制到GoDaddy的服务器。 提前谢谢!

  • 问题内容: 我正在使用Microsoft Sql Server Management Studio。我目前有一个包含数据的现有数据库,我将其称为DatabaseProd。我还有一个第二个数据库,其中包含用于测试的数据,因此数据既不完全正确也不是最新的。我将这个数据库称为DatabaseDev。 但是,DatabaseDev现在包含新添加的表和新添加的列等。 我想将此新模式从DatabaseDev复

  • 问题内容: 如何从一个数据库复制到另一个数据库。 数据库名称visco 我想将所有表从visco数据库复制到新数据库名称作为neptune 我创建了一个没有任何表的数据库,然后尝试从database1.bak文件还原数据库,然后显示错误为 需要查询帮助 问题答案: 使用SQL Server Management Studio: 选项1 ->右键单击要复制的数据库 ->选择“任务”>“生成脚本” -

  • 问题内容: 我正在尝试将数据从一个数据库复制到另一个数据库。一切工作正常,直到修改了源数据库中的一行之一(下面的堆栈跟踪)。按预期将新行添加到目标数据库。 对于每个数据库连接(mysql和hsqldb),我都有一个由以下bean组成的上下文文件: 在我为每个数据库连接中创建一个: 很简单: 我正在使用Spring Integration将2种服务方法连接在一起。服务方法如下: 我尝试过从s 分离列

  • 问题内容: 我需要将数据从一个表复制到另一个表。这两个表几乎具有相同的结构,但是位于不同的数据库中。 我试过了 我尝试此操作,但跨数据库出现错误…未实现 问题答案: 这是一个非常简单的任务。只需为此目的使用dblink: 如果您需要定期从外部数据库中获取数据,明智的做法是定义服务器和用户映射。然后,您可以使用较短的语句:

  • 问题内容: 我需要将表从一个数据库复制到另一个数据库。这将是一个cronjob。哪一种是最好的方法?PHP脚本或Shell脚本。PHP的问题是,两个数据库都有不同的用户名和密码,所以我不能这样做。 我应该只连接第一个DB以获得所有记录,然后使用WHILE循环将所有记录插入新数据库,还是有更好的方法? 我更喜欢用shell脚本代替PHP脚本来执行此操作。 谢谢 问题答案: 我把它丢了。比任何基于PH