[dev] Optional migrations
Jan Schneider
jan at horde.org
Mon Jan 17 17:20:56 UTC 2011
Zitat von Michael Rubinsky <mrubinsk at horde.org>:
>
> Quoting Jan Schneider <jan at horde.org>:
>
>> Does anybody have a bright idea how to implement optional Horde_Db
>> migrations?
>>
>> A perfect example is the new Share SQL driver that needs a
>> different table layout than the existing SQL driver. As with any
>> new driver, the two options are to:
>> 1) Create new tables and keep the old ones for backup or to
>> potentially run both share driver side-by-side. This may include a
>> one-time copy-and-conversion of the old data to the new tables.
>> 2) Update the existing tables and data in place.
>>
>> Back in the old times we let the admin decide when to run a
>> convert_X_to_Y script to migrate to a different backend. With
>> migrations this would happen automatically.
>> Option 1 might be a good solution for that but the problem is the
>> one-time data conversion. If for example the new driver is going to
>> be tested, which is probably a common scenario, there is no way
>> with the current migration framework to re-run this migration at a
>> later point.
>
> Couldn't migrate down be used to bring the schema version back, then
> rerun the migrate up operation? The migrate down operation shouldn't
> attempt to move any share data back to the original share tables,
> but shouldn't drop or delete from the original tables.
I disagree, if migration migrates data too, it should work in both
directions. Besides that, this is getting ugly if this is not the
latest migration step.
>> Option 2 obviously requires that the configuration is changed at
>> the same time. It also determines that the migration has to be done
>> at a certain step in the migration sequence, i.e. it doesn't allow
>> to do the migration at a later point.
>
> For an optional driver, this seems too final. i.e., Previously we
> were able to switch between using datatree or sql on a whim without
> losing data in the process.
>
>>
>> A solution might be to do this migration completely out of the
>> regular migration route, which kind-of defeats the purpose of
>> migrations and makes it difficult to later update those tables
>> automatically.
>
>> Another solution could implement the first approach, but provide a
>> separate script to re-run (or even run at all?) the data conversion.
>
> I think running the migration script automatically to create the new
> tables, and move existing data is a good approach, but the script
> shouldn't drop the original tables, remove or otherwise change the
> existing data. That way, if we revert to using the old driver, we
> can migrate share down, then rerun the migrate up.
See above.
Jan.
--
Do you need professional PHP or Horde consulting?
http://horde.org/consulting/
More information about the dev
mailing list