コンテナが起動しない場合、どのようにSQLクエリを実行しますか?(再構築失敗)

こんにちは。

アップデートと再構築を実行しようとしましたが、この美しいエラーが発生しました。

I, [2023-01-18T08:05:48.701709 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all'
I, [2023-01-18T08:05:52.431210 #1]  INFO -- :
I, [2023-01-18T08:05:52.431807 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
2023-01-18 08:05:59.081 UTC [1166] discourse@discourse ERROR:  could not create unique index "index_tags_on_name_ccnew_ccnew_ccnew5"
2023-01-18 08:05:59.081 UTC [1166] discourse@discourse DETAIL:  Key (name)=(vuejs) is duplicated.
2023-01-18 08:05:59.081 UTC [1166] discourse@discourse STATEMENT:  REINDEX INDEX CONCURRENTLY index_tags_on_name_ccnew_ccnew
rake aborted!
StandardError: An error has occurred, all later migrations canceled:

PG::UniqueViolation: ERROR:  could not create unique index "index_tags_on_name_ccnew_ccnew_ccnew5"
DETAIL:  Key (name)=(vuejs) is duplicated.
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/pg.rb:110:in `exec'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/pg.rb:110:in `async_exec'

フォーラムには同様の問題に関する他のトピックがあります(123)が、コンテナに入ろうとすると、次のようになります。

/var/discourse# ./launcher enter app
x86_64 arch detected.
Error: No such container: app

そのため、インデックスを手動で削除できません。

他にどのようなアプローチを取るべきか、何か提案はありますか?

「いいね!」 2

こんにちは、Ionutさん。

バグレポートありがとうございます。確認してみます。しかし、データベースのインデックスに問題があり、最近のマイグレーションでそれを修正しようとしていますが、人間の介入なしには修正できない問題もあります。

失敗したマイグレーションを導入したコミットはこれだと思われます。

代わりに、Discourseインスタンスを前のバージョンであるコミット 690e2f15ab9549486aaa6750e1093c1336bf17f2 にピン留めしてみてください。app.yml ファイルを編集し、paramsの下のversionキーを設定してください。そのキーのコメントアウトも解除してください。

そうすれば、すべてが開始され、重複した vuejs タグを削除できるようになるはずですが、重複したタグが使用されている場合、予期しない影響がある可能性があります。より良い解決策を見つけようとしますが、それまではこれでうまくいくはずです。

「いいね!」 2

起動後、Data Explorer プラグインを使用してすべての重複タグを見つけることができました。

SELECT name, count(*)
    FROM tags
    GROUP BY name
     HAVING count(*) > 1

何らかの理由で、約10個の重複タグがありました。なぜ、そしてどのようにそれらがそもそもそこにあったのか不思議です…

それらをすべて削除し、yml ファイルからバージョンロックを解除し、再構築したところ、すべて問題なく動作するようになりました。

ありがとうございました!

:+1:

「いいね!」 5

過去にも同様の事例があり、悪夢のような問題でしたが、アップグレードに関連していることが特定されました。

PGのインデックス構造は、インストール時のロケールに依存し、アップグレードは時に悪夢のような結果を招くことがあります。

再インデックスが十分な早期に実行されないと、問題が発生する可能性があります。以前のPG Dockerアップグレードの一部ではこれが実行されず、古いインストールには残念ながら時限爆弾のようなものが残っています。

現在ではエコシステムの大半で解決されていますが、一部の苦痛は残っています。

「いいね!」 2

原因の特定に役立つかもしれないので、システムに関する詳細を以下に示します。

インストールは確かに古く、2014年からですが、システムは少なくとも月に一度(通常は隔週)更新されています。そのため、メジャーバージョンがスキップされたことはありません。

バージョンロックはないため、基本的に main ブランチで利用可能な最新バージョンで実行しています(YOLO!)。

以前に非公式のものをいくつか試したことはありますが、インストールされているプラグインはすべて公式のもので、過去5年以上そうでした。

「いいね!」 1

私も同じ問題を抱えています。この文まであなたの手順に従いました。

重複を実際に削除するにはどうすればよいですか?Data Explorerで単にdelete SQLステートメントを実行するのですか?このタグを指している外部テーブルのレコードはどうなりますか?

更新1

わかりました、updateステートメントを実行できないことがわかりました。

GUIを使用してタグの名前を変更しました。

タグを編集する(/tag/fooに移動して)か、名前を変更するか、削除してください。

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