アップグレード失敗: UniqueViolation: 重複キーの値が一意制約 "data_explorer_queries_pkey" に違反しています

最新のアップグレードが失敗しました:

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' が失敗しました。戻り値: #<Process::Status: pid 3194 exit 1>
失敗の場所: /pups/lib/pups/exec_command.rb:112:in `spawn'
以下のパラメータで exec が失敗しました: {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
590cf0611c566ea6df5f70ffdd2cec2359e84eaea29b7abcde77d56288a46370
** ブートストラップに失敗しました ** 上記をスクロールして、より早いエラーメッセージを探してください。複数のエラーが存在する可能性があります。

ログの上部には以下が表示されています:

原因:
PG::UniqueViolation: エラー: 重複するキー値が一意制約 "data_explorer_queries_pkey" に違反しています
詳細: キー (id)=(-10) は既に存在します。

および

rake aborted!
StandardError: エラーが発生しました。このマイグレーションおよびその後のすべてのマイグレーションがキャンセルされました:

エラー: 重複するキー値が一意制約 "data_explorer_queries_pkey" に違反しています
詳細: キー (id)=(-10) は既に存在します。

したがって、重複する data_explorer_queries_pkey キーを削除する必要があると思われます。

その方法はどうすればよいでしょうか?

「いいね!」 1
「いいね!」 3

ありがとうございます。しかし、アプリにアクセスできません:

./launcher enter app
Error response from daemon: Container 694b24a2a235e90456fb0ca770c86ac14bb914ad33ada8a18fc4777a1188d848 is not running
root@gaoa-discourse:/var/discourse#

また、以下も発生しています:

root@gaoa-discourse:/var/discourse# su - postgres
No passwd entry for user 'postgres'
「いいね!」 1

コンテナを再起動しますか?

./launcher start app

次に、以下のようなコマンドを実行します:

./launcher enter app

その後:

su postgres -c 'psql discourse'

「いいね!」 4

ありがとうございます!最初試したときに起動しなかった理由がわかりません。

どうやら「10」という ID が重複しているようです:

4374 | discourse-data-explorer | q:-10 | JSON      | {"id":-10,"name":"Inactive Users with no posts","description":"analyze pre-Discourse signups.","sql":"SELECT\
n    u.id,\n    u.username_lower AS \"username\",\n    u.created_at,\n    u.last_seen_at\nFROM users u\nWHERE u.active = false\nORDER BY u.id\n","created_by":"-1",
"created_at":null,"group_ids":[],"last_run_at":"2019-10-21T04:03:35.548+00:00"}

4114 | discourse-data-explorer | q:-10 | JSON      | {"id":-10,"name":"Inactive Users with no posts","description":"analyze pre-Discourse signups.","sql":"SELECT\
n    u.id,\n    u.username_lower AS \"username\",\n    u.created_at,\n    u.last_seen_at\nFROM users u\nWHERE u.active = false\nORDER BY u.id\n","created_by":"-1",
"created_at":null,"last_run_at":"2019-02-27T06:17:48.317+00:00"}

なので、おそらく以下のコマンドを実行すべきでしょう:

DELETE from plugin_store_rows WHERE id = 10

それとも、以下でしょうか:

DELETE from plugin_store_rows WHERE id = -10

気になりますね——上記のコマンドで削除されるのは、最初に見つかったものですか、それとも両方ですか?

「いいね!」 1

ID 列の数字は 43744114 です。番号の大きい方を削除してください。

DELETE from plugin_store_rows WHERE id = 10 を実行しないでください!! そうすると、間違ったエントリが削除されてしまいます!

「いいね!」 3

ああ、これですか?

DELETE from plugin_store_rows WHERE id = 4374;

「いいね!」 1

はい。PL/SQL クエリの出力には正しい列ヘッダーが表示されるはずです。

「いいね!」 1

今、そう言われると、そうですね。出力が次のようになっているので、スクロールダウンしました:

「いいね!」 2

はい、一般的には、コミットする前にコマンドを実行してその影響を確認することをお勧めします。詳細は以下をご覧ください:

もし、1 行だけを削除するつもりが誤って 500 行を削除してしまった場合でも、ロールバックして元に戻すことができます。

「いいね!」 3

成功しました! :tada: ご指導ありがとうございます、@merefield さん。

私の DELETE コマンドに閉じ括弧のセミコロンが抜けていました(上記で更新済み)。

「いいね!」 3

ああ、それには毎回引っかかりますね :wink:

「いいね!」 3

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