如何在 Rails 应用程序中克隆表并保持结构同步?

Posted

技术标签:

【中文标题】如何在 Rails 应用程序中克隆表并保持结构同步?【英文标题】:How to clone a table and keep structure in sync in Rails app? 【发布时间】:2021-09-02 01:55:47 【问题描述】:

我有一张有很多记录的表,所以我遇到了慢速 SQL 查询。问题是我正在使用 act_as_paranoid gem,并且没有硬删除记录,只有用 deleted_at 时间戳标记“已删除”记录。我不想完全删除这些记录,因为我需要它们来进行统计。

我的计划是将“已删除”的记录移动到另一个具有相同结构的表中。所以问题是:就 rails 而言,如何克隆表(没有数据)并保持结构同步。我不想重复迁移和模型。

【问题讨论】:

学习Partitioning。尤其是分区修剪。 看起来像一个解决方案,谢谢。 @Akina 找不到如何按空值和非空值分割 提供有关当前结构的更多信息(并显示 2-3 个示例行,可能会跳过多余的列)。一般来说,按 null 和 not null 值拆分几乎不需要,但如果确实需要,那么您可以尝试按表达式或生成的列进行分区。 @Akina 快速示例。我有 800k 记录,其中 delete_at 列不为空,100k 记录,deleted_at 为空。 SQL 查询类似于 select * from real_estate where price 。有了这个总行数,它运行了约 2 秒。但是当我有大约 10 万条记录时,它应该会快得多。我简化了很多查询,在实际情况下可能存在很多其他字段。 【参考方案1】:

您可以尝试使用纯 SQL 来完成。这会做你想做的事:

创建表 new_tbl LIKE orig_tbl;

您也可以阅读本文档,因为它有助于学习分区。

【讨论】:

以上是关于如何在 Rails 应用程序中克隆表并保持结构同步?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Rails 迁移克隆数据库表?

Rails+React/Next.js:如何存储代码块以保持格式化?

Rails:如何管理同步数据的两个表之间的关联?

用于创建表并在两个字段上添加唯一索引的 Rails 迁移文件在迁移期间似乎被忽略了

如何在 ruby​​ on rails 中通过 websocket 发送保持活动的数据包

如何使用 Rails 让我的 Twitter Bot 保持清醒?