バージョン選択

フォーラム

メニュー

オンライン状況

85 人のユーザが現在オンラインです。 (70 人のユーザが フォーラム を参照しています。)
登録ユーザ: 1
ゲスト: 84
dola789ruc もっと...

サイト内検索

質問 > 管理機能 > プラグインのアップデートやインストールが外部キー制約に関するエラーが出てできない

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
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: プラグインのアップデートやインストールが外部キー制約に関するエラーが出てできない
a foreign key constraint fails (`database_name`.`main_table_name`, CONSTRAINT `FK_XXXXXXXXXXXX` FOREIGN KEY (`order_item_id`) REFERENCES `dtb_order_item` (`id`))


ご自身でも書かれている通り、この部分の原因を特定し修正するのが良いかと思います。main_table_nameのorder_item_idに、実際にdtb_order_itemテーブルには存在しないIDが登録されていないか確認してはいかがでしょうか。

データに外部キー制約違反が存在している状態では、プラグインのアップデート、インストールはできないです。


----------------
-------------------

各決済会社3Dセキュア実装・EC-CUBEカスタマイズ・不具合修正
お任せください。ゴールドパートナー。

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: プラグインのアップデートやインストールが外部キー制約に関するエラーが出てできない
外部キーエラーをPhpMyAdmin上で解決。操作か何かでできますでしょうか?(※SQL等、DBの詳しい知識はほとんどありません)


tattsuさんに指摘されている通り、
main_table_nameテーブル自体は、EC-CUBEをカスタマイズしない限りは作成されませんので、DBの詳しい知識がない状態ですとmain_table_nameテーブルを使用するカスタマイズした仕様およびDB設計を理解していなければ相応の知識が必要ですので難しいかと思います。


----------------
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EC-CUBEインテグレートパートナー【ゴールド】ランク
M&I Works
URL: https://miworks.biz/
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

tattsu
投稿日時: 2025/5/15 15:13
対応状況: −−−
仙人
登録日: 2023/12/23
居住地:
投稿: 418
Re: プラグインのアップデートやインストールが外部キー制約に関するエラーが出てできない
引用:
その日の注文を調べてみると、dtb_orderテーブル、dtb_order_itemテーブルにはあるのに、管理画面でその注文番号を検索してもでてこない注文番号が多数あるようです。

無理やりその注文番号のURLをたたいてみるとシステムエラーになります。

全ては調べてませんが、これが注文番号と総注文数に相違がある原因ではないかと思っております。

外部キー制約違反もこれが原因の可能性はありますでしょうか?


とは言い切れないです。

根本的には下記を探す必要があります。

>main_table_nameのorder_item_idに、実際にdtb_order_itemテーブルには存在しないID

こんなSQLで調べられないでしょうか。
SELECT main.* 
FROM main_table_name AS main
LEFT JOIN dtb_order_item AS item 
    ON main.order_item_id = item.id
WHERE item.id IS NULL;



引用:
その場合、dtb_orderテーブル、dtb_order_itemテーブルから管理画面に出ないidを削除すればいい等、単純なものなのでしょうか?
その他、関連するテーブル等ありますでしょうか?


こちらもなんとも言えないです。
全体像を見ないことには判断不可能です。


----------------
-------------------

各決済会社3Dセキュア実装・EC-CUBEカスタマイズ・不具合修正
お任せください。ゴールドパートナー。

mkh
投稿日時: 2025/5/16 8:40
対応状況: −−−
新米
登録日: 2025/5/10
居住地:
投稿: 7
Re: プラグインのアップデートやインストールが外部キー制約に関するエラーが出てできない
ご返信、ありがとうございます。
引用:
tattsuさんに指摘されている通り、
main_table_nameテーブル自体は、EC-CUBEをカスタマイズしない限りは作成されませんので、DBの詳しい知識がない状態ですとmain_table_nameテーブルを使用するカスタマイズした仕様およびDB設計を理解していなければ相応の知識が必要ですので難しいかと思います。

そうですよね。もう少し自分でやってみて詳しい方にお願いする等検討したいと思います。
mkh
投稿日時: 2025/5/16 8:46
対応状況: −−−
新米
登録日: 2025/5/10
居住地:
投稿: 7
Re: プラグインのアップデートやインストールが外部キー制約に関するエラーが出てできない
いろいろとご教授いただき、ありがとうございます。

引用:
こんなSQLで調べられないでしょうか。

SELECT main.* 
FROM main_table_name AS main
LEFT JOIN dtb_order_item AS item 
    ON main.order_item_id = item.id
WHERE item.id IS NULL;

こちら試してみたいと思います。
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: プラグインのアップデートやインストールが外部キー制約に関するエラーが出てできない
▼テンプレート
[EC-CUBE] 4.3.0
[レンタルサーバ] さくらサーバー
[PHP] 8.3.8
[データベース] MySQL 8.0
[WEBサーバ] FreeBSD 13.0
[導入プラグインの有無] 公式プラグイン、決済プラグイン、デザインテンプレート他、カスタマイズプラグイン多数 合計18個
[カスタマイズの有無] デザインの調整、プラグインの調整を少し。関係がありそうなカスタマイズは特にしておりません。


最初の投稿で、多数のプラグインインストールとカスタマイズ(プラグインの調整)を行っている様ですので、実環境を見てみない事にはエラーメッセージが出ている内容の影響範囲(外部キーの制約がされているテーブル範囲など)がどこまでなのか正確な事が解らないと思います。
最初の投稿から、mkhさんはDBの詳しい知識がないとの事ですので、プラグインの仕様およびカスタマイズした仕様などDB設計を理解していなければ相応の知識が必要ですので難しいかと思います。

調査・修正依頼であれば、EC-CUBEインテグレートパートナーにご相談・ご依頼する事をオススメ致します。
https://www.ec-cube.net/integrate/partner/


----------------
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EC-CUBEインテグレートパートナー【ゴールド】ランク
M&I Works
URL: https://miworks.biz/
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は107,939名です
総投稿数は112,703件です

投稿数ランキング

1
seasoft
7369
2
468
3217
3
AMUAMU
2712
4
nanasess
2334
5
umebius
2085
6
h_tanaka
2018
7
yuh
1900
8
mcontact
1732
9
red
1582
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
805
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
balisys
502


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.