QA #1085
奈良 裕記 さんが約4年前に更新
h3. ■現象/要望
Redmine稼働環境のDBMSとして、mysql/mariadb, postgresqlの2系統が主に利用されている。
DBMS間差異は殆どがRails側で吸収されているが、DBMS自体の動作差異により、完全に同一の動作とはなっていない。postgresqlでは問題無く、MYSQL環境でのみトラブル発生する場合もある。
*DBMS差異による動作差異の発生個所、対処方法をまとめ、各現場で円滑に運用可能にしたい。*
本チケットの対象範囲
・本チケットに対象範囲は mysql/mariadb, postgresqlの2系統とし、SQLite、MSSQLServerを除外する。
(理由は補足欄参照、関連情報のリンクは構いませんが、積極的な調査対象とはしない。)
h3. ■解決策
DBMS間差異に関連すると思われる事例/対応策を記録。
(情報リンク/抜粋で良い)
h1. 対応作業事例
h2. DBMS/Railsバージョンにより、Migration中で処理分割する場合
h3. 対処方法
DBMS/Railsバージョンにより、Migration中で処理分割する場合
if Redmine::Database.mysql?
if Redmine::Database.postgresql?
if Rails::VERSION::MAJOR == 4
詳細は下記参照
DB Migrationの実行を条件分けしたい(migration失敗回避)
https://redmine.tokyo/issues/844
h2. PluginのDB migration中エラー(Mysql:外部キー存在時、インデックス削除失敗)
h3. 現象/発生条件
redmine_knowledgebase Redmine4.0対応(と思われるフォーク)にて、DB migration中に下記エラー発生する。
Cannot drop index 'index_taggings_on_tag_id': needed in a foreign key constraint: DROP INDEX `index_taggings_on_tag_id` ON `taggings`
現象発生フォーク
https://github.com/southbridgeio/redmine_knowledgebase
関連やりとり
https://twitter.com/y503Unavailable/status/1235222914850361345
h3. 発生原因
Mysqlで外部キーを作成すると、インデックスが自動的に追加される。(pgsqlでは追加されないと思われる)
Migration中でインデックスを削除しようとしても、外部キーが存在すると、インデックスの削除に失敗する。
http://kwski.net/mysql/602/
>MySQLでは外部キーを設定すると自動的にインデックスが作成されるようです。
>逆に外部キーが設定されたままインデックスを削除しようとするとエラーになります。
h3. 対処方法
(暫定対策)
DB Migration失敗後(問題となったテーブルの外部キー作成後)、手動で外部キーを削除してから再度実行する。
Migration完了後に再度外部キーを作成する。
これで一応通った。
本来は、Rails側流儀に合った形で恒久対応必要
h4. migration中での処理方法
Railsマイグレーションのindex、foreign_keyの設定
https://qiita.com/shitake4/items/2f08c0d9b13d090c6071
インデックス、外部キーの追加/削除
add_index、remove_index、add_foreign_key、remove_foreign_key
Railsの外部キー制約とreference型について
https://qiita.com/ryouzi/items/2682e7e8a86fd2b1ae47
Railsで外部キー制約のついたカラムを作る時のmigrationの書き方
https://qiita.com/publichtml/items/1fba15d8071fab66d043
add_reference
h2. (テンプレ)現象タイトル
h3. 現象/発生条件
h3. 発生原因
h3. 対処方法
h1. ■補足情報
h3. SQLite/MSSQLServerを除外する背景
・SQLiteはローカルの検証環境で利用される場合があるが、中規模以上の実運用環境では性能上無理がある。
・Redmine構築用パッケージ(ansible)/配布VM/コンテナでは、mysql/mariadb, postgresqlの利用が大半である。
・MSSQLServerは、2020/3現在、Redmine4.0で動作していない(Redmine本家30285)
利用も少ないと思われる。(Windows環境ではBitnami利用が大半)
!https://unofficial-redmine.org/matomo/matomo.php?idsite=1&rec=1085!
戻る