如何在 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+React/Next.js:如何存储代码块以保持格式化?
用于创建表并在两个字段上添加唯一索引的 Rails 迁移文件在迁移期间似乎被忽略了