古いデータベースを最新バージョンにインポート

返信ありがとうございます。しかし、単に投票を削除するだけでは重複レコードの問題は解決しません。phpbb3からのインポートがどこかで不正確だったため、それらのレコードが作成されたのだと思われます。それらは有効なレコードですが、元のインポートでそれをチェックしなかったため、UUIDが重複しています。

いずれにせよ、この問題に遭遇した人々のための解決策は以下の通りです。

  1. post_custom_fields テーブルの問題のあるレコードを変更して、一時的に移動させます。再構築を数分待ってから別のエラーが発生するのを見るよりも、この方法の方が良いでしょう。

    update post_custom_fields set name = 'polls' where name = 'polls_bak';
    update post_custom_fields set name = 'polls-votes' where name = 'polls-votes_bak';

  2. アプリの再構築、アップデート、またはユーザーが実行しようとしているその他の操作を実行します。

  3. すべてがビルドアップして起動したら、ライブで実行中のコンテナに接続します。

  4. 投票を元の名前に戻します。

    update post_custom_fields set name = 'polls'_bak' where name = 'polls';
    update post_custom_fields set name = 'polls-votes_bak'' where name = 'polls-votes';

  5. アプリコンテナ内で、問題を引き起こしているマイグレーションを(手動で)実行します。VERSIONはマイグレーションのファイル名にある番号です。

    まず、マイグレーションをアンランします。これはデータベースに対して何も行わないため、何も起こりません。
    REFACTOR: use tables instead of custom fields for polls by ZogStriP · Pull Request #6359 · discourse/discourse · GitHub

    rake db:migrate:down VERSION=20180820080623

    マイグレーションを実行し、最初のエラーを探します。

    rake db:migrate:up VERSION=20180820080623

  6. データベースGUIなどを使用して、問題のあるUUIDを検索します。編集が容易になります。

    select from post_custom_fields where value like '%your_UUID%';

  7. ここからが難しい部分です。UUIDは投票の回答/オプションの識別子です。そのため、poll レコードのUUIDを、例えば 731ef6901e968fc3f4e785fcb9e9abe8 から 731ef6901e968fc3f4e785fcb9e9abe9 に変更する必要があります。システム内でこれと全く同じUUIDを見つける可能性は非常に低いですが、これを行った後、poll-votes テーブル内の対応するUUIDも見つけて、新しいUUIDに変更する必要があります。これにより、投票や回答を失うことはありません。

  8. マイグレーションを再度実行し、次のエラーを探します。

    rake db:migrate:up VERSION=20180820080623

  9. このプロセスを、マイグレーションが完了し、すべての投票が新しいテーブルに移行されるまで繰り返します。

    誰も返信して、そのUUIDが何であるか、何を参照しているのかを説明しようともしなかったことに失望しています。オープンソースであることは承知しており、コミットされてから何年も経っていることも承知しています。文句を言っているわけではありませんが、公式リポジトリに実際にコミットしている人々からの何らかの支援があれば、非常に感謝されます。

    問題は解決したので、ハッピーデイズです。

    ありがとうございます!