Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

h2からpostgresql移行時に正しくデータが反映されない #100

Closed
nagodon opened this issue Oct 13, 2015 · 7 comments
Closed

Comments

@nagodon
Copy link
Contributor

nagodon commented Oct 13, 2015

h2のデータが破損したためpostgresqlに移行を試みたのですが、一部のデータ(ユーザ情報)が正常に反映されず一部の記事のauthorが何も表示がない状態になりました。
こちら全て反映させるために何か特別な作業等ありますでしょうか?

以下作業した手順記載しておきます。

  1. postgresqlをインストール
  2. knowledge用のユーザとDBをcli上から作成
  3. knowledgeのweb画面からpostgresqlの接続情報を設定
  4. 組み込みデータベースからpostgresqlへのデータ移行ボタンを押して移行
@nagodon
Copy link
Contributor Author

nagodon commented Oct 13, 2015

すいません、バージョン等を明記していませんでした。

ホスト: Ubuntu15.04(vagrant x virtualbox)
ゲスト: Docker ubuntu14.04バージョン
postgresql: 9.3.4(Ubuntu公式リポジトリ)

別環境のmac book上にbrewでpostgresql93(9.3.9)をインストールしてやってみたところ
こちらは問題なく移行できてそうでした。

@koda-masaru
Copy link
Contributor

ご連絡ありがとうございます。

h2のデータが破損した

導入を簡単にしようと思ってH2を使ってみたのですが、データ破損ですか。
パフォーマンスが凄く遅くなることもありましたし、PostgreSQLを使う事を推奨すると、
README.mdなどに記載した方が良さそうですね。

全て反映させるために何か特別な作業等ありますでしょうか?

特に特別な操作は必要ありません。
上記の手順で全てのデータがコピー出来るようにしたつもりです。
(何か不具合がありそうですが、、、)

データのコピーは、org.support.project.knowledge.logic.DataTransferLogic というクラスで
実施しています。
そのクラスでは、コピー元からデータを全件読みだして、それをコピー先に登録をしています。

この処理も、サーバープロセス上で実施すると「重い」と思ったので、サーバーでコピーの
リクエストを受けたら、サーバーのプロセスの外でバッチ起動して実施しています。

そのようなバッチ処理は、別途バッチ名でログが出力されます。
ログのディレクトリに、「DataTransferBat.log」という名称でログが出力されていないでしょうか?
そのログの中にエラーはないでしょうか?

別環境のmac book上にbrewでpostgresql93(9.3.9)をインストールしてやってみたところ
こちらは問題なく移行できてそうでした。

PostgreSQLのバージョンによって、うまくいく/いかない があるということでしょうか。
ちなみに、私の環境は、9.4.1 です。Dockerhub の OFFICIALイメージを使っています。
(テストで公開している環境も)

先日も、DBのマイグレーションがPostgeSQLのバージョンによって動かない(?)と
いう事があったようです。
PostgreSQLの推奨バージョンも定義しないといけないですね。

@nagodon
Copy link
Contributor Author

nagodon commented Oct 14, 2015

返信遅くなってしまい申し訳ありません。

導入を簡単にしようと思ってH2を使ってみたのですが、データ破損ですか。
パフォーマンスが凄く遅くなることもありましたし、PostgreSQLを使う事を推奨すると、
README.mdなどに記載した方が良さそうですね。

原因不明なのですが、破損してしまったんですよね。
リカバリもできない状態でした。

README.mdに書いてあるとありがたいですね。

特に特別な操作は必要ありません。
上記の手順で全てのデータがコピー出来るようにしたつもりです。
(何か不具合がありそうですが、、、)

やはり特別な操作は必要ないですね。
Docker上のコンテナに入れてやったのがまずかったとかですかね。

そのようなバッチ処理は、別途バッチ名でログが出力されます。
ログのディレクトリに、「DataTransferBat.log」という名称でログが出力されていないでしょうか?
そのログの中にエラーはないでしょうか?

こちらなのですが、DataTransferBat.logは出力されてませんでした。
app.logにはデータ移行時のログは出力されてるようです。

PostgreSQLのバージョンによって、うまくいく/いかない があるということでしょうか。
ちなみに、私の環境は、9.4.1 です。Dockerhub の OFFICIALイメージを使っています。
(テストで公開している環境も)

9.4.1でも動くんですね。
driverのバージョンが9.3だったので9.3系でやっておりました。

先日も、DBのマイグレーションがPostgeSQLのバージョンによって動かない(?)と
いう事があったようです。
PostgreSQLの推奨バージョンも定義しないといけないですね。

こちらも定義されてると導入の際のトラブル軽減になりそうです。

@nagodon
Copy link
Contributor Author

nagodon commented Oct 16, 2015

色々試してみたのですがログを見てる限りですとSQL自体は流れてるようなのですが
どうしても出てしまう管理ユーザのデータinsert時のduplicate keyの例外の前のデータが消えるような動きになっているようです。

@nagodon
Copy link
Contributor Author

nagodon commented Oct 18, 2015

こちらですが事前にtruncateすることで回避できたのでtruncateの対応しようと思うのですが問題ないでしょうか?

https://github.com/support-project/knowledge/blob/master/src/main/java/org/support/project/knowledge/logic/DataTransferLogic.java#L85 の部分をtruncateに置き換える感じになります。

truncate sql: TRUNCATE TABLE xxx RESTART IDENTITY

@koda-masaru
Copy link
Contributor

いろいろ調べていただきありがとうございま 😄
truncateの対応でお願いします。

@nagodon
Copy link
Contributor Author

nagodon commented Oct 19, 2015

すいません、TRUNCATE TABLE xxx RESTART IDENTITYなのですがPostgresqlのみの構文のため
カスタムDBから組み込みDBへの移行の際にエラーになってしまうのでRESTART IDENTITYはやめて普通のTRUNCATE構文のみにしsequenceだけ変えるようにしますね。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants