Mike, thank you very much for so fast and detailed response!

чт, 31 окт. 2019 г. в 17:45, Mike Bayer <mike...@zzzcomputing.com>:

>
>
> On Thu, Oct 31, 2019, at 8:45 AM, Alexander wrote:
>
> Dear colleagues,
>
> I would like to extend enum type in postgres using alembic and currently i
> have to do the following:
>
> name = 'my_type'
> old_enum = sa.dialects.postgresql.ENUM('value1', 'value2', name=name)
> new_enum = sa.dialects.postgresql.ENUM('value1', 'value2', 'value3',
> name=name)
>
> op.execute(f'ALTER TYPE {name} RENAME TO _{name}')
> new_enum.create(op.get_bind())
> op.execute(f'ALTER TABLE table1 ALTER COLUMN col1 TYPE {name} USING
> col1::text::{name}')
> op.execute(f'DROP TYPE _{name}')
>
> Since 9.1 postgres supports adding new values to enum natively (added
> queries below), is it possible to perform such request in alembic?
> ALTER TYPE enum_type ADD VALUE 'new_value'; -- appends to list
> ALTER TYPE enum_type ADD VALUE 'new_value' BEFORE 'old_value';
> ALTER TYPE enum_type ADD VALUE 'new_value' AFTER 'old_value';
>
>
>
> you are using op.execute() already to emit the "ALTER TYPE" command
> directly.   Just emit the "ALTER TYPE .. ADD VALUE" commands via
> op.execute() instead.
>
> I happen to recall that there is a restriction on "ADD VALUE" that it
> can't run in a transaction block, and even though you didn't note this, I
> would assume this is the actual problem you are having (if this is the
> case, please include details like these, that is, what you tried and why it
> is not working, as we would not usually know what the problem you are
> having is otherwise).
>
> To deal with this restriction Alembic has a fairly recent feature as of
> 1.2.0 called autocommit_block:
>
>
> https://alembic.sqlalchemy.org/en/latest/api/runtime.html#alembic.runtime.migration.MigrationContext.autocommit_block
>
>
> the documentation above refers to the specific example of emitting "ADD
> VALUE" on PostgreSQL.
>
>
>
>
>
>
> --
> Kind regards,
> Alexander.
>
>
> --
> 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/CAMXowCahmsmL4VFsFCWy6L1HmoM_OuA7F6C1s3H27UCFnoa8jA%40mail.gmail.com
> <https://groups.google.com/d/msgid/sqlalchemy-alembic/CAMXowCahmsmL4VFsFCWy6L1HmoM_OuA7F6C1s3H27UCFnoa8jA%40mail.gmail.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/a80e1792-82c6-4685-8ca4-3851141f872f%40www.fastmail.com
> <https://groups.google.com/d/msgid/sqlalchemy-alembic/a80e1792-82c6-4685-8ca4-3851141f872f%40www.fastmail.com?utm_medium=email&utm_source=footer>
> .
>


-- 
Kind regards,
Alexander.

-- 
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/CAMXowCas7bBsEcRBsnAw05Bhd0JPq_o8%2BaTWJuSkcsS6sv-_fQ%40mail.gmail.com.

Reply via email to