use server_default in alembic to ensure zero-downtimeness

we can back-fill data, however, between alembic running and the api
updating to the new code, it'll still try and create new users without
adding the auth_type, because that won't be referenced in the model yet.

Instead of using a python-level default, a postgres-level
server_default will make postgres set every row to sms_auth if it's not
defined in the application.
This commit is contained in:
Leo Hemsted
2017-10-30 11:17:46 +00:00
parent 6acea8323b
commit 0ab89116ee

View File

@@ -21,16 +21,12 @@ def upgrade():
)
op.execute("INSERT INTO auth_type VALUES ('email_auth'), ('sms_auth')")
op.add_column('users', sa.Column('auth_type', sa.String(), nullable=True))
op.execute("UPDATE users SET auth_type='sms_auth'")
op.alter_column('users', 'auth_type', nullable=False)
op.add_column('users', sa.Column('auth_type', sa.String(), nullable=False, server_default='sms_auth'))
op.create_index(op.f('ix_users_auth_type'), 'users', ['auth_type'], unique=False)
op.create_foreign_key(None, 'users', 'auth_type', ['auth_type'], ['name'])
op.add_column('invited_users', sa.Column('auth_type', sa.String(), nullable=True))
op.execute("UPDATE invited_users SET auth_type='sms_auth'")
op.alter_column('invited_users', 'auth_type', nullable=False)
op.add_column('invited_users', sa.Column('auth_type', sa.String(), nullable=False, server_default='sms_auth'))
op.create_index(op.f('ix_invited_users_auth_type'), 'invited_users', ['auth_type'], unique=False)
op.create_foreign_key(None, 'invited_users', 'auth_type', ['auth_type'], ['name'])