Estou tentando alterar o tipo de uma coluna de ENUM para INTEGER (que também é uma chave estrangeira) no PostgreSQL usando Alembic. No entanto, quando tento atualizar a migração, encontro o seguinte erro:
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.CannotCoerce) não é possível converter o tipo serie_enum para inteiro LINHA 1: ...R COLUNA serie_aluno TIPO INTEIRO USANDO serie_aluno::integer
[SQL: ALTER TABLE aluno ALTER COLUNA serie_aluno TIPO INTEIRO USANDO serie_aluno::integer]
Aqui está o arquivo de migração gerado pelo Alembic:
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.alter_column('aluno', 'serie_aluno',
existing_type=postgresql.ENUM('6', '7', '8', '9', name='serie_enum'),
type_=sa.Integer(),
existing_nullable=False,
postgresql_using="NULL")
op.create_foreign_key(None, 'aluno', 'serie', ['serie_aluno'], ['id_serie'])
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_constraint(None, 'aluno', type_='foreignkey')
op.alter_column('aluno', 'serie_aluno',
existing_type=sa.Integer(),
type_=postgresql.ENUM('6', '7', '8', '9', name='serie_enum'),
existing_nullable=False)
# ### end Alembic commands ###
Como posso converter com sucesso uma coluna de ENUM para INTEGER e, ao mesmo tempo, garantir que a restrição de chave estrangeira seja criada corretamente?