我正在尝试在Alembic上创建新的迁移,该迁移将新Enum类型的新列添加到现有表中。但是我遇到了一个错误,我以为Alembic会自动处理。
我正在使用Postgres 9.6.6,Alembic 0.9.10和SQLAlchemy 1.2.9。
我的脚本中包含以下内容:
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column(
"task",sa.Column(
"task_type",sa.Enum(
"train","predict","refresh",name="tasktypeenum"
),nullable=True,),)
# ### end Alembic commands ###
当我尝试应用此迁移脚本时,这是堆栈跟踪的结尾(其余仅来自SQLAlchemy):
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) type "tasktypeenum" does not exist
LINE 1: ...task ADD COLUMN task_type tasktypeen...
^
[SQL: 'ALTER TABLE task ADD COLUMN task_type tasktypeenum'] (Background on this error at: http://sqlalche.me/e/f405)
但是,在旧的迁移文件中我们有类似的语句,可以正常工作。我看到的唯一区别是它们嵌套在op.create_table
中。
我知道我可以通过执行op.execute("CREATE TYPE ...")
来解决此问题,但是我想知道是否存在使用Alembic功能的解决方案。
感谢您的指导!