i think i just figured out that what i'm trying to do is unreasonable and unecessary. alembic shouldn't have to know how to reverse map the schemas and i don't need to do it that way. i can create my dev schema in public and autogenerate against that, which maintains the same schema in metadata and the db.
thanks, brian On Thursday, March 19, 2020 at 7:41:54 PM UTC-4, Brian Hill wrote: > > > > On Thursday, March 19, 2020 at 7:19:08 PM UTC-4, Mike Bayer wrote: >> >> so let me get this straight: >> >> 1. you have many schemas >> >> > yes > > >> 2. you want to run autogenerate only once >> > > yes > > >> 3. you want your mirations genrated with None for schema >> > > yes > > >> 4. *HOWEVER*, when you run autogenerate, you are picking *one* (random? >> arbitrary?) schema to use as the target, is that right? >> > > yes one, but it won't be arbitrary, it will be a development schema > generated from the latest version (prior to the change we want to > autogenerate). > > >> >> As it stands, your autogenerate is not going to look in any schema except >> "public", assuming default PG search path, because you did not set >> "include_schemas=True". >> >> > i had it set to True and it behaves the same. i just took it out based on > your previous suggestion, but again, it behaves the same. > > If you truly want autogenerate to look at one schema and only that schema, >> and generate everything as non-schema qualified, then I would simply set >> the default schema in PG to that schema name using search_path: >> >> connection.execute("SET search_path TO my_schema") >> >> that way everything Alembic reflects will be from "my_schema" and it will >> see the schema as blank, and it should generate as such. you might need to >> disable the schema translate map when autogenerate runs but try it without >> doing that first. >> >> > it's still generating the entire schema in the revision file. > > here's the updated section and it behaves the same with/without schema > translate map: > > with connectable.connect() as connection: > > # create DB_SCHEMA if it doesn't exist > connection.execute(f'create schema if not exists {DB_SCHEMA}') > > # map metadata schema (None) to DB_SCHEMA > # connection = > connection.execution_options(schema_translate_map={None:DB_SCHEMA}) > > connection.execute(f"set search_path to {DB_SCHEMA}") > > # set alembic version table location in DB_SCHEMA > context.configure( > connection=connection, > include_schemas=True, > target_metadata=metadata, > version_table_schema=DB_SCHEMA, > ) > > with context.begin_transaction(): > context.run_migrations() > > > >> >> >> On Thu, Mar 19, 2020, at 7:09 PM, Brian Hill wrote: >> >> Here's my env.py. Thanks for the help. >> Brian >> >> On Thursday, March 19, 2020 at 5:37:38 PM UTC-4, Mike Bayer wrote: >> >> >> >> On Thu, Mar 19, 2020, at 5:30 PM, Brian Hill wrote: >> >> Are there known issues with using autogenerate with multi-tenant >> (schema_translate_map)? >> >> >> it's complicated and not one-size-fits-all, if you consider that to be an >> issue >> >> >> >> My metadata doesn't have a schema and I my >> schema_translate_map={None:'my_schema'}. >> >> This works for migrations but when I use autogenerate the generated >> revision file is the full schema and not the diff. >> >> It's detecting the alembic version table in the tenant schema. If I run >> the autogenerate a second time with the new revision file it fails saying >> Taget database is not up to date. >> >> >> are you setting include_schemas=True in your environment? I'd probably >> not do this. Can't help much more without a complete and concise working >> example of your env.py, please remove all extraneous details. >> >> >> >> Thanks, >> >> Brian >> >> >> -- >> 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/5011240c-ba09-4423-9a05-0e6d2481dadf%40googlegroups.com >> >> <https://groups.google.com/d/msgid/sqlalchemy-alembic/5011240c-ba09-4423-9a05-0e6d2481dadf%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/fe6fddb4-25d6-4dd1-be3a-c1a174548bb4%40googlegroups.com >> >> <https://groups.google.com/d/msgid/sqlalchemy-alembic/fe6fddb4-25d6-4dd1-be3a-c1a174548bb4%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> >> >> *Attachments:* >> >> - env.py >> >> >> -- 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/43c28063-a8f0-4671-8922-013e574874be%40googlegroups.com.