diff --git a/backend/open_webui/migrations/versions/38d63c18f30f_add_oauth_session_table.py b/backend/open_webui/migrations/versions/38d63c18f30f_add_oauth_session_table.py index b1930e6389..264ce13b41 100644 --- a/backend/open_webui/migrations/versions/38d63c18f30f_add_oauth_session_table.py +++ b/backend/open_webui/migrations/versions/38d63c18f30f_add_oauth_session_table.py @@ -20,6 +20,31 @@ depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: + # Ensure 'id' column in 'user' table is unique and primary key (ForeignKey constraint) + inspector = sa.inspect(op.get_bind()) + columns = inspector.get_columns("user") + + pk_columns = inspector.get_pk_constraint("user")["constrained_columns"] + id_column = next((col for col in columns if col["name"] == "id"), None) + + if id_column and not id_column.get("unique", False): + unique_constraints = inspector.get_unique_constraints("user") + unique_columns = {tuple(u["column_names"]) for u in unique_constraints} + + with op.batch_alter_table("user") as batch_op: + # If primary key is wrong, drop it + if pk_columns and pk_columns != ["id"]: + batch_op.drop_constraint( + inspector.get_pk_constraint("user")["name"], type_="primary" + ) + + # Add unique constraint if missing + if ("id",) not in unique_columns: + batch_op.create_unique_constraint("uq_user_id", ["id"]) + + # Re-create correct primary key + batch_op.create_primary_key("pk_user_id", ["id"]) + # Create oauth_session table op.create_table( "oauth_session",