如何标记删除列或在Activerecord Postgresql中排除



rails跟踪现有列(魔术发生在此处),并在加载加载时使用了.eager_load的表。.eager_load产生一个看起来像:

的SQL查询
SELECT "models"."id" AS t0_r0,
...
"models"."deprecated_column" as t0_r1,
... as t1_r0,
...

这在大多数情况下都很好。但是在删除列时会变得有问题。

我想知道是否有标记删除列的方法

读取活动记录源代码,看起来PG_ATTRIBUTE将具有attisdropped = true,则不会选择列。但是我不确定如何通过activerecord迁移设置它。

我不确定您确切需要什么,但是看起来这可能会有所帮助:

Model.connection.schema_cache.clear!
Model.reset_column_information 

我在铁路文档中找到了答案,需要设置ignored_columns:https://api.rubyonrails.org/classes/classes/activerecord/modelschema/modelschema/classchema/classmethods.html#method-i-ignored_columns-3d

部署了更新的代码后,应该安全地删除列。

最新更新