首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >structure_dump和structure_load

structure_dump和structure_load
EN

Stack Overflow用户
提问于 2019-07-04 10:36:26
回答 1查看 743关注 0票数 1

我不明白我们什么时候会使用structure_dumpstructure_load。Rails文档中没有任何信息:

ActiveRecord::Tasks::DatabaseTasks::structure_load

ActiveRecord::Tasks::DatabaseTasks::structure_dump

有人能彻底解释一下这些方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-04 20:41:19

首先,我将链接到一些Rails文档,这些文档可能更有帮助。本文档是关于默认Rails rake任务的,这些任务利用了您已经询问过的方法:

Rails模式转储的类型 (Rails边导轨)

我假设您熟悉Rails的db/schema.rb文件。该文件本质上是一个大的“迁移”文件,它包含一些可以运行的Ruby代码,这些代码将在数据库中创建所有必需的表和索引。这就是运行rake db:schema:load时发生的情况。

我们可以使用rake db:schema:dump从本质上获取数据库的状态,并将其直接转换为schema.rb文件。如果我们没有任何迁移文件,并且没有现有的schema.rb文件,我们可能需要这样做。在某些情况下(不是很多),ActiveRecord很难将数据库模式直接“转换”到Ruby代码中。ActiveRecord无法转换某些功能/选项,包括但不限于:

structure_dump及其伴随的rake任务db:structure:dump存在试图解决这个问题。它没有要求ActiveRecord的数据库适配器将其转储到包含schema.rb代码的structure.sql文件中,而是使用数据库的底层管理工具将其转储到包含大量SQL语句的structure.sql文件中。在原始SQL中“表示”数据库模式通常更容易,而不必先将其转换为Ruby代码。生成的structure.sql文件现在可以通过以下两种方式之一重新创建数据库模式/结构:

  • 在SQL提示符中或以由数据库管理系统直接计算的某种方式运行db/structure.sql的内容。
  • 运行rake任务db:structure:load。这将从db/structure.sql读取,并将其内容计算为原始SQL,但通过ActiveRecord -非常类似于db:schema:load

注意: Rails 6.1中的db:structure:dumpdb:structure:load已弃用。在6.1及更高版本中,架构类型在您的环境配置中是可配置的:

代码语言:javascript
运行
复制
config.active_record.schema_format = :sql

这将切换正常的db:schema:loaddb:schema:dump格式,而不是使用SQL格式。

TLDR:有时很难将模式直接转储到ActiveRecord代码,因此structure_dump允许将模式转储到原始SQL。可以运行该SQL来重新创建数据库架构,就像运行schema.rb来重新创建数据库架构一样。您可以作为原始SQL或通过运行rake任务db:structure:load将其加载到数据库中。在Rails 6.1中,这种情况正在改变

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56886120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档