23 lines
834 B
Python
23 lines
834 B
Python
"""users: логин уникален без учёта регистра
|
|||
|
|
|
||
|
|
Revision ID: 0008
|
||
|
|
Revises: 0007
|
||
|
|
"""
|
||
|
|
from alembic import op
|
||
|
|
import sqlalchemy as sa
|
||
|
|
|
||
|
|
revision = "0008"
|
||
|
|
down_revision = "0007"
|
||
|
|
branch_labels = None
|
||
|
|
depends_on = None
|
||
|
|
|
||
|
|
|
||
|
|
def upgrade() -> None:
|
||
|
|
dup = op.get_bind().execute(sa.text("SELECT lower(username), array_agg(username) FROM users GROUP BY 1 HAVING count(*) > 1")).all()
|
||
|
|
if dup:
|
||
|
|
raise RuntimeError(f"Логины, совпадающие без учёта регистра: {[(r[0], r[1]) for r in dup]}. Переименуйте или удалите дубли и повторите миграцию")
|
||
|
|
op.create_index("uq_users_lower_username", "users", [sa.text("lower(username)")], unique=True)
|
||
|
|
|
||
|
|
|
||
|
|
def downgrade() -> None:
|
||
|
|
op.drop_index("uq_users_lower_username", table_name="users")
|