# DB内の重複ユーザー名に関するアップグレードの問題

**URL:** https://meta.discourse.org/t/upgrade-issue-with-duplicate-username-in-db/177664
**Category:** Self-hosting
**Created:** [2021 年 1 月 29 日午後 12:30 UTC](https://meta.discourse.org/t/upgrade-issue-with-duplicate-username-in-db/177664 "2021-01-29T12:30:19Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![volksman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/volksman/32/207678_2.png) [@volksman](https://meta.discourse.org/u/volksman)
#### Post date: [2021 年 1 月 29 日午後 12:30 UTC](https://meta.discourse.org/t/upgrade-issue-with-duplicate-username-in-db/177664/1 "2021-01-29T12:30:19Z")

</div>

今朝、ボードをアップグレードしようとしたところ、エラーが発生しました。

> PG::UniqueViolation: ERROR: duplicate key value violates unique constraint “index\_users\_on\_username”

エラーにはユーザー名「MikeC」が記載されていました。そこで調査したところ、postgres\_data を復元してボードを再起動し、その後データベース内の重複を確認するよう指示されました。そこで `username_lower = 'mikec'` に対して簡単なクエリを実行したところ、1 行が返ってきました。その後、以下のような高度なクエリを見つけました。

`SELECT username_lower, count(*) from users GROUP by username_lower HAVING count(*) > 1;`

しかし、このクエリは結果を返さなかったのです。では、重複はどこにあるのでしょうか？ご助言いただければ幸いです。現在は古いデータで動作していますが、アプリを正常に再構築できるようになりたいと考えています。

---

<div class="post-metadata">

### Author: ![volksman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/volksman/32/207678_2.png) [@volksman](https://meta.discourse.org/u/volksman)
#### Post date: [2021 年 1 月 29 日午後 1:00 UTC](https://meta.discourse.org/t/upgrade-issue-with-duplicate-username-in-db/177664/2 "2021-01-29T13:00:00Z")

</div>

私の解決策は以下の通りですが、もっと良い方法があるはずです：

管理セクションに移動し、‘MikeC’ で検索すると 2 人のユーザーが返ってきました。そこで最も古い方のユーザー名を変更し、再構築を再度実行する代わりに、直接データベースにログインして再インデックスを作成しました：

```
cd /var/discourse
./launcher enter app
sudo -i postgres psql discourse
discourse# REINDEX SCHEMA CONCURRENTLY public;

```

これで別の重複ユーザーが見つかった場合は、Web UI に戻ってそのユーザーを検索し、古い方のユーザー名を変更します。重複が見つかるまでこの手順（洗い流して、すすいで、繰り返す）を繰り返します。その後、再構築を実行すれば成功です！

ただし、以下の点について知りたいと考えています：

1. なぜ Discourse は重複ユーザーを許可するのでしょうか？ユーザー名は大文字小文字を区別しない設定ですが、username\_lower は本来一意であるべき値に正規化されます。これはかなり重大なバグのように思えます。

2. これらの重複ユーザーを特定し、修正するより良い方法は何でしょうか？

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2021 年 1 月 29 日午後 2:41 UTC](https://meta.discourse.org/t/upgrade-issue-with-duplicate-username-in-db/177664/3 "2021-01-29T14:41:48Z")

</div>

これ以上の良い方法はないと思います。重複したユーザー名は許可されていませんが、過去のバグにより、小文字化チェックが適切に実行されていなかったようです。これについて最近、別のトピックでも話題になりました。

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [2021 年 2 月 28 日午後 2:42 UTC](https://meta.discourse.org/t/upgrade-issue-with-duplicate-username-in-db/177664/4 "2021-02-28T14:42:35Z")

</div>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
