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. 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側流儀に合った形で恒久対応必要
h2. (テンプレ)現象タイトル
h3. 現象/発生条件
h3. 発生原因
h3. 対処方法
h1. ■補足情報
h3. SQLite/MSSQLServerを除外する背景
・SQLiteはローカルの検証環境で利用される場合があるが、中規模以上の実運用環境では性能上無理がある。
・Redmine構築用パッケージ(ansible)/配布VM/コンテナでは、mysql/mariadb, postgresqlの利用が大半である。
・MSSQLServerは、2020/3現在、Redmine4.0で動作していない(Redmine本家30285)
利用も少ないと思われる。(Windows環境ではBitnami利用が大半)
戻る