创建 alembic 迁移以为 version_table_schema 创建架构

Create an alembic migration to create schema for version_table_schema

我想使用 alembic 在名为 foo 的单个 PostgreSQL 模式范围内管理我的数据库。 对于新环境的自动部署,我希望 alembic 创建架构:

op.execute("create schema foo")

我还想在此架构中使用 version_table_schema='foo' 用于 env.py 中的 context.configure alembic_version table。 然而,我 运行 陷入了一个 catch 22 的境地,因为模式尚未创建并且 alembic 无法检查它的版本。

有没有办法在没有人工干预的情况下使用 version_table_schema kwarg?我是否需要单独的 env.py 和版本文件夹来创建架构?

您可以像这样在 env.py 中创建架构:

    with connectable.connect() as connection:
        context.configure(
            connection=connection,
            target_metadata=target_metadata,
            include_schemas=True,
            version_table_schema='foo'
        )

        connection.execute('CREATE SCHEMA IF NOT EXISTS foo')

        with context.begin_transaction():
            context.run_migrations()