質問 > 管理機能 > プラグインのアップデートやインストールが外部キー制約に関するエラーが出てできない |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
mkh |
投稿日時: 2025/5/10 13:53
対応状況: −−−
|
新米 ![]() ![]() 登録日: 2025/5/10 居住地: 投稿: 7 |
プラグインのアップデートやインストールが外部キー制約に関するエラーが出てできない ▼テンプレート
[EC-CUBE] 4.3.0 [レンタルサーバ] さくらサーバー [PHP] 8.3.8 [データベース] MySQL 8.0 [WEBサーバ] FreeBSD 13.0 [導入プラグインの有無] 公式プラグイン、決済プラグイン、デザインテンプレート他、カスタマイズプラグイン多数 合計18個 [カスタマイズの有無] デザインの調整、プラグインの調整を少し。関係がありそうなカスタマイズは特にしておりません。 [現象] プラグインのアップデートやインストールが外部キー制約に関するエラーが出てできない。 今年、約5年運用中のECCUBE4.0.6から4.3.0に移行しました。制作は別サーバー(さくら)で制作し、データ移行ツールでXサーバーのサイトからデータを移行しました。 テストドメインでの制作の為、その後、サイトをコピーしコピーした方を本番ドメインに切り替えて現在運用しております。 プラグインのアップデートがあった為、現在の本番サイトをもう一つコピーし、アップデートのテストをすると以下のエラーが出てアップデートできません。 ----------------- An exception occurred while executing a query: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`database_name`.`main_table_name`, CONSTRAINT `FK_XXXXXXXXXXXX` FOREIGN KEY (`order_item_id`) REFERENCES `dtb_order_item` (`id`)) {"success":false,"log":"An exception occurred while executing a query: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`database_name`.`main_table_name`, CONSTRAINT `FK_XXXXXXXXXXXX` FOREIGN KEY (`order_item_id`) REFERENCES `dtb_order_item` (`id`))"} ----------------- いろいろ原因を調べましたが、最初に制作した段階のテストドメインの制作サイトでは問題なくアップデートできるので、本番サイト(コピーした方のサイト)に移行したデータが何かおかしいという事がわかりました。 テストドメインで制作したサイトをコピーする際に、サーバーがサクラサーバーで容量が大きなsqlデータをphpMyadminで移行できませんでした。 ターミナルからなら大きなデータもインポートできるとの情報を元に移行しましたが、この時の設定等が悪かったのではないかと思います。 移行した段階では問題なさそうに見えてましたので、こちらを本番サイトとして公開しました。 phpMyadminでは「外部キーのチェックを無効にする」オプションがいると聞きますが、ターミナルでの操作はこういったオプション等は追加しておりませんでした。 デフォルトの状態でのインポートがどのような状態でインポートされるのかわかりませんが、何か問題があったのかと思います。 本番サイトは公開から数か月程運用しています。 最初制作した正常な状態のサイトは数か月前のデータなので、元に戻すこともできません。 もう一度、新規にサイトを作りデータ移行ツールプラグインで会員データや受注データだけ移行すればいいかもと考えましたが、4.3から4.3のデータ移行ツールはないようなので使えません。 そもそもプラグインの新規インストールもエラーになります。 現状の本番サイトはプラグインがアップデートできないという以外は正常です。 ----------------- 制作サイト(初期制作サイト)中身は数か月前のデータ。プラグインのアップデート、インストールはできる 本番サイト(制作サイトのDBデータをターミナルからインポート) ※運用中 怖くて試してはいませんが、プラグインのアップデート、インストールができないと思われる テストサイト(現状の本番サイトをPhpMyAdminからコピー) プラグインのアップデート、インストールができない ----------------- 上記のような少しややこしい状況なのですが、何かいい解決方法はありますでしょうか? 下記方法等ができれば解決できそうなのですが・・ 外部キーエラーをPhpMyAdmin上で解決。操作か何かでできますでしょうか?(※SQL等、DBの詳しい知識はほとんどありません) 本番サイトのDBデータのエクスポート時に外部キーエラーが起こらないようにインポートする(※外部キーのチェックを無効にする等は試したのですがダメでした) ECCUBE4.3で会員データや受注データのみDBインポート以外の方法?で移行する よろしければご教授いただけますと幸いです。 よろしくお願いいたします。 |
tattsu |
投稿日時: 2025/5/10 14:11
対応状況: −−−
|
仙人 ![]() ![]() 登録日: 2023/12/23 居住地: 投稿: 418 |
Re: プラグインのアップデートやインストールが外部キー制約に関するエラーが出てできない
ご自身でも書かれている通り、この部分の原因を特定し修正するのが良いかと思います。main_table_nameのorder_item_idに、実際にdtb_order_itemテーブルには存在しないIDが登録されていないか確認してはいかがでしょうか。 データに外部キー制約違反が存在している状態では、プラグインのアップデート、インストールはできないです。
|
mkh |
投稿日時: 2025/5/10 14:52
対応状況: 確認中
|
新米 ![]() ![]() 登録日: 2025/5/10 居住地: 投稿: 7 |
Re: プラグインのアップデートやインストールが外部キー制約に関するエラーが出てできない 早々のご返信ありがとうございます。
引用: main_table_nameのorder_item_idに、実際にdtb_order_itemテーブルには存在しないIDが登録されていないか確認してはいかがでしょうか。 こちらの部分、確認してみます。 |
mkh |
投稿日時: 2025/5/11 17:10
対応状況: −−−
|
新米 ![]() ![]() 登録日: 2025/5/10 居住地: 投稿: 7 |
Re: プラグインのアップデートやインストールが外部キー制約に関するエラーが出てできない order_item_id等、テーブルを調べてみました。
実際にdtb_order_itemテーブルには存在しないIDというのが、実際どういう事かよく理解できておりませんが、 いろいろ調べてみると、外部キーエラーのあるサイトの全注文数(処理中、返品等含む)と、最終注文番号に相違がある事がわかりました。 外部キーエラーがない制作サイトでは全注文数と最終注文番号が同じです。 その抜けている番号が何なのか考えてみましたが、4.3.0に移行後すぐに、メディアに紹介された日があり、1日に1000件以上の注文がありました。 サーバーが非力だったので、大量の注文を捌けずにエラー等で完了できていない注文が多数ありました。 その日の注文を調べてみると、dtb_orderテーブル、dtb_order_itemテーブルにはあるのに、管理画面でその注文番号を検索してもでてこない注文番号が多数あるようです。 無理やりその注文番号のURLをたたいてみるとシステムエラーになります。 全ては調べてませんが、これが注文番号と総注文数に相違がある原因ではないかと思っております。 外部キー制約違反もこれが原因の可能性はありますでしょうか? その場合、dtb_orderテーブル、dtb_order_itemテーブルから管理画面に出ないidを削除すればいい等、単純なものなのでしょうか? その他、関連するテーブル等ありますでしょうか? 難しい内容かと思いますが、ご教授いただけますと幸いです。 よろしくお願いいたします。 |
mcontact |
投稿日時: 2025/5/15 9:08
対応状況: −−−
|
神 ![]() ![]() 登録日: 2022/1/22 居住地: 投稿: 1732 |
Re: プラグインのアップデートやインストールが外部キー制約に関するエラーが出てできない
tattsuさんに指摘されている通り、 main_table_nameテーブル自体は、EC-CUBEをカスタマイズしない限りは作成されませんので、DBの詳しい知識がない状態ですとmain_table_nameテーブルを使用するカスタマイズした仕様およびDB設計を理解していなければ相応の知識が必要ですので難しいかと思います。
|
tattsu |
投稿日時: 2025/5/15 15:13
対応状況: −−−
|
仙人 ![]() ![]() 登録日: 2023/12/23 居住地: 投稿: 418 |
Re: プラグインのアップデートやインストールが外部キー制約に関するエラーが出てできない 引用:
その日の注文を調べてみると、dtb_orderテーブル、dtb_order_itemテーブルにはあるのに、管理画面でその注文番号を検索してもでてこない注文番号が多数あるようです。 とは言い切れないです。 根本的には下記を探す必要があります。 >main_table_nameのorder_item_idに、実際にdtb_order_itemテーブルには存在しないID こんなSQLで調べられないでしょうか。
引用: その場合、dtb_orderテーブル、dtb_order_itemテーブルから管理画面に出ないidを削除すればいい等、単純なものなのでしょうか? こちらもなんとも言えないです。 全体像を見ないことには判断不可能です。
|
mkh |
投稿日時: 2025/5/16 8:40
対応状況: −−−
|
新米 ![]() ![]() 登録日: 2025/5/10 居住地: 投稿: 7 |
Re: プラグインのアップデートやインストールが外部キー制約に関するエラーが出てできない ご返信、ありがとうございます。
引用: tattsuさんに指摘されている通り、 そうですよね。もう少し自分でやってみて詳しい方にお願いする等検討したいと思います。 |
mkh |
投稿日時: 2025/5/16 8:46
対応状況: −−−
|
新米 ![]() ![]() 登録日: 2025/5/10 居住地: 投稿: 7 |
Re: プラグインのアップデートやインストールが外部キー制約に関するエラーが出てできない いろいろとご教授いただき、ありがとうございます。
引用: こんなSQLで調べられないでしょうか。
こちら試してみたいと思います。 |
mkh |
投稿日時: 2025/5/20 7:41
対応状況: −−−
|
新米 ![]() ![]() 登録日: 2025/5/10 居住地: 投稿: 7 |
Re: プラグインのアップデートやインストールが外部キー制約に関するエラーが出てできない SQL試してみましたが、main_table_name 自体ありませんでした。
main_table_nameとは実際のテーブルの名前だったのですね。知識不足で申し訳ございません。 エラー文をもう一度出してみましたが、main_table_nameの部分が違っており、テーブル名を伏字にしたり修正する際にいくつかある別サイトのエラー文が入っていたのかもしれません。 大変申し訳ございませんでした。 実際のエラー分は以下のようになります。 --------------- An exception occurred while executing a query: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`database_name`.`#sql-2e2759_11c8c12a`, CONSTRAINT `FK_XXXXXXXXXXXX` FOREIGN KEY (`order_item_id`) REFERENCES `dtb_order_item` (`id`)) {"success":false,"log":"An exception occurred while executing a query: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`database_name`.`#sql-2e2759_11c8c12a`, CONSTRAINT `FK_XXXXXXXXXXXX` FOREIGN KEY (`order_item_id`) REFERENCES `dtb_order_item` (`id`))"} --------------- main_table_nameの部分はサイトやアップデートするプラグインによってなのか毎回違いますが、以下のような文字列になっておりました。 #sql-2e2759_11c8c12a #sql-alter-324-1d5ae3f 何か、おわかりになりますでしょうか? あと、もし外部キー制約違反の修正が難しい場合、受注データを全部削除すれば解消されるものでしょうか? ECCUBE4のデータ削除はいろいろと制約があり難しいのは存じておりますが、dtb_order_item、dtb_mail_history、dtb_shipping、dtb_orderを削除し、受注IDを1に戻せばリセットされるといくつかのサイトに書いてありました。 これで外部キー制約違反が解消される可能性はありますでしょうか? 以上、何かアドバイスいただけると幸いです。 よろしくお願いいたします。 |
mcontact |
投稿日時: 2025/5/23 19:05
対応状況: −−−
|
神 ![]() ![]() 登録日: 2022/1/22 居住地: 投稿: 1732 |
Re: プラグインのアップデートやインストールが外部キー制約に関するエラーが出てできない
最初の投稿で、多数のプラグインインストールとカスタマイズ(プラグインの調整)を行っている様ですので、実環境を見てみない事にはエラーメッセージが出ている内容の影響範囲(外部キーの制約がされているテーブル範囲など)がどこまでなのか正確な事が解らないと思います。 最初の投稿から、mkhさんはDBの詳しい知識がないとの事ですので、プラグインの仕様およびカスタマイズした仕様などDB設計を理解していなければ相応の知識が必要ですので難しいかと思います。 調査・修正依頼であれば、EC-CUBEインテグレートパートナーにご相談・ご依頼する事をオススメ致します。 https://www.ec-cube.net/integrate/partner/
|
(1) 2 » |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |