Hi Andy,

As you said, it is not a merge, more like a "checkout". To accomplish that
with alembic, you would need to downgrade (see
https://alembic.sqlalchemy.org/en/latest/tutorial.html#downgrading) from a4
back to root, and then upgrade up to b4.


On Mon, May 3, 2021 at 10:22 AM AndyS <andy.salni...@gmail.com> wrote:

> (I posted this also on Stack Overflow, but realized that this may be a
> better place for this sort of question)
>
> I'm trying to wrap my head around alembic features, and probably am using
> alembic in a ways it was not designed for so I'm looking for some advice
> from
> experts.
>
> In my design I have two variants of database schema (e.g. "A" and "B"), the
> variants are exclusive, a particular database instance has to chose to use
> one
> variant at initialization time. Both variants are changing during
> development
> and I use Alembic to manage schema upgrades for a single variant. For
> management purpose my Alembic history for both branches starts with a
> single
> base which is also a branchpoint, something like:
>
>        (branch: A)
>        +--> a1 --> a2 --> a3 --> a4 --> ...
>       /
>     root
>       \
>        +--> b1 --> b2 --> b3 --> b4 --> ...
>        (branch: B)
>
> That works well, but now for some instances I'd like to switch from
> variant A
> to B, let's say from revision a3 or a4 to revision b4, something like:
>
>        +--> a1 --> a2 --> a3 --> a4 --> ...
>       /                          |
>     root                         |
>       \                          v
>        +--> b1 --> b2 --> b3 --> b4 --> ...
>
> This may look like a merge for revision a4 but it really is not, it is more
> like "git checkout" but I also need to make sure that data from branch A is
> migrated to branch B of course.
>
> I tried to introduce special migrations, e.g. branching at a4 and ending at
> b4, but that confuses Alembic, apparently there cannot be two separate
> migration scripts resulting in the same revision, i.e. "merge" is the only
> way
> to have more than one parent for a revision. But merge is not going to work
> here too because b3 and a4 cannot coexist in the same database.
>
> I think it's obvious that standard history (from top graph) and a4-b4
> migration steps cannot exist in a common history, so I am thinking about
> messing with Alembic by hiding its standard history and only exposing a4-b4
> step when I need to do this special migration, but I'm not sure if it's
> going
> to work well at scale (with many more special migrations).
>
> Did anyone have similar issues and was able to solve them reasonably, can
> you
> share your experience?
>
> --
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy-alembic" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to sqlalchemy-alembic+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/sqlalchemy-alembic/37aa678f-a438-4288-a7fc-ae779187692fn%40googlegroups.com
> <https://groups.google.com/d/msgid/sqlalchemy-alembic/37aa678f-a438-4288-a7fc-ae779187692fn%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy-alembic" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy-alembic+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy-alembic/CAOG-P07%3D%3DeJjJ_z07uqg7-_O2kuLAHgSPrtfH%3DRRgiSXLhP3sw%40mail.gmail.com.

Reply via email to