У меня есть миграция, которая работает с общей схемой с именем tenant_schema
.
В функции run_migrations_online
в env.py
я настроил schema_translate_map для tenant_schema
.
Я ожидал, что sqlalchemy
переведет эту операцию миграции для запуска в нужной схеме, однако похоже, что она пытается выполнить SQL-запросы, используя схему tenant_schema
.
есть идеи как это исправить?
пример
функция обновления в файле миграции:
2018-09-05_17-28_247f3546088f_add_foo_column.py
def upgrade():
op.add_column('derived_table', sa.Column('foo', sa.BigInteger(), nullable=True),
schema='tenant_schema')
функция run_migrations_online
:
env.py
schema = 'other_name' # normally i get the name as an argument from alembic
def run_migrations_online():
connectable = create_engine(get_url(), echo=True)
with connectable.connect() as connection:
# setting up the translation map
conn = connection.execution_options(schema_translate_map={'tenant_schema': schema})
context.configure(
connection=conn,
target_metadata=target_metadata,
include_schemas=True,
version_table_schema=schema,
include_object=include_object,
)
with context.begin_transaction():
context.run_migrations()
исключение (полный возврат слишком длинный и не слишком информативный):
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) schema "tenant_schema" does not exist
[SQL: 'ALTER TABLE tenant_schema.derived_table ADD COLUMN foo BIGINT']
(Background on this error at: http://sqlalche.me/e/f405)
как видите, он пытается сделать ALTER TABLE tenant_schema.derived_table
вместо желаемого ALTER TABLE other_name.derived_table