On Monday, August 28, 2017 at 4:10:56 PM UTC-7, Beth Skurrie wrote:
>
> We're following a zero-downtime database migration strategy, so we only
> ever add columns, and don't delete the old ones. Is there a way to tell the
> model to ignore the deprecated columns so that there are no accessor
> methods created for them?
>
Sequel currently creates accessor methods for all columns by default, but
you can always just remove them:
class ModelName < Sequel::Model
[:deprecated_col1, :deprecated_col2, :deprecated_col3].each do |col|
overridable_methods_module.send(:remove_method, col)
overridable_methods_module.send(:remove_method, :"#{col}=")
end
end
Note that just leaving the columns available indefinitely is not the best
strategy for a zero-downtime migrations. For zero-downtime migrations, you
should set a manual selection for the model's dataset:
class ModelName < Sequel::Model(DB[:model].select(:col1, :col2, :col3))
end
You also need to make sure that all queries that use the model in your
application select specific columns which do not include the columns you
want to remove.
Put a new version of your application into production. After all old
versions of your application are no longer running, you can then run a
migration to remove the unused column. Assuming you are using a database
that doesn't rewrite the table when removing a column, there should be no
significant downtime, but that's something you would definitely want to
test before relying on it.
Thanks,
Jeremy
--
You received this message because you are subscribed to the Google Groups
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sequel-talk.
For more options, visit https://groups.google.com/d/optout.