cms icon indicating copy to clipboard operation
cms copied to clipboard

[4.x]: Integrity constraint violation on resaving entries

Open ryssbowh opened this issue 8 months ago • 1 comments

What happened?

Description

Got this error today while resaving entries :

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`db`.`searchindexqueue_fields`, CONSTRAINT `fk_pvcxbujjvsoxwphmterhoupwikguxokpulcw` FOREIGN KEY (`jobId`) REFERENCES `searchindexqueue` (`id`) ON DELETE CASCADE)
The SQL being executed was: INSERT INTO `searchindexqueue_fields` (`jobId`, `fieldHandle`) VALUES (20753, 'packageSearchValues') ON DUPLICATE KEY UPDATE `jobId`=`searchindexqueue_fields`.`jobId`

This was triggered by a webhook (paypal) related to an order, this order has related entries that need resaved when the order status changes.

The entries are resaved with a simple Craft::$app->elements->saveElement($entry, false);

I don't understand what this mean or what we can do to avoid it. Could you share some light on it ?

This might be related to some other issues we have with updating search indexes : https://github.com/craftcms/commerce/issues/3711

Craft CMS version

4.5.15

PHP version

8.3

Operating system and version

No response

Database type and version

No response

Image driver and version

No response

Installed plugins and versions

No response

ryssbowh avatar Jun 10 '25 09:06 ryssbowh

Hi, thanks for getting in touch! The searchindexqueue_fields table was added in version 4.15.0 (via https://github.com/craftcms/cms/pull/16644), but your report says you’re on 4.5.15? Can you please share a full stack trace for when you’re getting this error?

i-just avatar Jun 16 '25 12:06 i-just

@i-just sorry I mistyped, we're on 4.15.5

ryssbowh avatar Jun 22 '25 06:06 ryssbowh

@i-just stack trace :

#40 /***/httpdocs/vendor/yiisoft/yii2/db/Command.php(1320): PDOStatement::execute
#39 /***/httpdocs/vendor/yiisoft/yii2/db/Command.php(1320): yii\db\Command::internalExecute
#38 /***/httpdocs/vendor/yiisoft/yii2/db/Command.php(1120): yii\db\Command::execute
#37 /***/httpdocs/vendor/craftcms/cms/src/helpers/Db.php(1047): craft\helpers\Db::upsert
#36 /***/httpdocs/vendor/craftcms/cms/src/services/Search.php(241): craft\services\Search::createOrUpdateIndexJob
#35 /***/httpdocs/vendor/craftcms/cms/src/services/Search.php(213): craft\services\Search::queueIndexElement
#34 /***/httpdocs/vendor/craftcms/cms/src/services/Elements.php(3573): craft\services\Elements::_saveElementInternal
#33 /***/httpdocs/vendor/craftcms/cms/src/services/Elements.php(1108): craft\services\Elements::saveElement
#32 /***/httpdocs/modules/site/src/services/Packages.php(760): modules\site\services\Packages::resavePackages
#31 /***/httpdocs/modules/site/src/services/Packages.php(324): modules\site\services\Packages::resaveOrderPackages
#30 /***/httpdocs/modules/site/src/services/Orders.php(942): modules\site\services\Orders::orderStatusChange
#29 [internal](0): call_user_func
#28 /***/httpdocs/vendor/yiisoft/yii2/base/Event.php(312): yii\base\Event::trigger
#27 /***/httpdocs/vendor/yiisoft/yii2/base/Component.php(654): yii\base\Component::trigger
#26 /***/httpdocs/vendor/craftcms/commerce/src/services/OrderHistories.php(143): craft\commerce\services\OrderHistories::createOrderHistoryFromOrder
#25 /***/httpdocs/vendor/craftcms/commerce/src/elements/Order.php(3612): craft\commerce\elements\Order::_saveOrderHistory
#24 /***/httpdocs/vendor/craftcms/commerce/src/elements/Order.php(2218): craft\commerce\elements\Order::afterSave
#23 /***/httpdocs/vendor/craftcms/cms/src/services/Elements.php(3462): craft\services\Elements::_saveElementInternal
#22 /***/httpdocs/vendor/craftcms/cms/src/services/Elements.php(1108): craft\services\Elements::saveElement
#21 /***/httpdocs/vendor/craftcms/commerce/src/elements/Order.php(1760): craft\commerce\elements\Order::markAsComplete
#20 /***/httpdocs/vendor/craftcms/commerce/src/elements/Order.php(1669): craft\commerce\elements\Order::updateOrderPaidInformation
#19 /***/httpdocs/vendor/craftcms/commerce/src/services/Transactions.php(475): craft\commerce\services\Transactions::saveTransaction
#18 /***/httpdocs/vendor/craftcms/commerce/src/services/Payments.php(616): craft\commerce\services\Payments::_saveTransaction
#17 /***/httpdocs/vendor/craftcms/commerce/src/services/Payments.php(641): craft\commerce\services\Payments::_updateTransaction
#16 /***/httpdocs/vendor/craftcms/commerce/src/services/Payments.php(296): craft\commerce\services\Payments::processPayment
#15 /***/httpdocs/vendor/craftcms/commerce/src/controllers/PaymentsController.php(468): craft\commerce\controllers\PaymentsController::actionPay

ryssbowh avatar Jul 02 '25 05:07 ryssbowh

We're also seeing this error on a site running Craft 5.7.6. It seems to happen when content editors are working on entries, and there's a lot of "Updating search indexes" jobs.

Stack trace for reference:

PDOException: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails
(`srhd`.`craft_searchindexqueue_fields`, 
 CONSTRAINT `craft_fk_lnpmkcyjlpeebmqyhgngrpasvlmbgyrdkxsi` 
 FOREIGN KEY (`jobId`) REFERENCES `craft_searchindexqueue` (`id`) ON DELETE CASCADE)
in /home/user/site/vendor/yiisoft/yii2/db/Command.php:1320

Stack trace:
#0  /home/user/site/vendor/yiisoft/yii2/db/Command.php(1320): PDOStatement->execute()
#1  /home/user/site/vendor/yiisoft/yii2/db/Command.php(1120): yii\db\Command->internalExecute()
#2  /home/user/site/vendor/craftcms/cms/src/helpers/Db.php(1098): yii\db\Command->execute()
#3  /home/user/site/vendor/craftcms/cms/src/services/Search.php(252): craft\helpers\Db::upsert()
#4  /home/user/site/vendor/craftcms/cms/src/services/Search.php(224): craft\services\Search->createOrUpdateIndexJob()
#5  /home/user/site/vendor/craftcms/cms/src/services/Elements.php(4116): craft\services\Search->queueIndexElement()
#6  /home/user/site/vendor/craftcms/cms/src/services/Elements.php(4051): craft\services\Elements->updateSearchIndex()
#7  /home/user/site/vendor/craftcms/cms/src/services/Elements.php(1251): craft\services\Elements->craft\services\{closure}()
#8  /home/user/site/vendor/craftcms/cms/src/services/Elements.php(3744): craft\services\Elements->ensureBulkOp()
#9  /home/user/site/vendor/craftcms/cms/src/services/Elements.php(1337): craft\services\Elements->_saveElementInternal()
#10 /home/user/site/vendor/craftcms/cms/src/elements/NestedElementManager.php(802): craft\services\Elements->saveElement()
#11 /home/user/site/vendor/craftcms/cms/src/elements/NestedElementManager.php(681): craft\elements\NestedElementManager->saveNestedElements()
#12 /home/user/site/vendor/craftcms/cms/src/fields/Matrix.php(1447): craft\elements\NestedElementManager->maintainNestedElements()
#13 /home/user/site/vendor/craftcms/cms/src/base/Element.php(6474): craft\fields\Matrix->afterElementPropagate()
#14 /home/user/site/vendor/craftcms/cms/src/elements/Entry.php(2856): craft\base\Element->afterPropagate()
#15 /home/user/site/vendor/craftcms/cms/src/services/Elements.php(3990): craft\elements\Entry->afterPropagate()
#16 /home/user/site/vendor/craftcms/cms/src/services/Elements.php(1251): craft\services\Elements->craft\services\{closure}()
#17 /home/user/site/vendor/craftcms/cms/src/services/Elements.php(3744): craft\services\Elements->ensureBulkOp()
#18 /home/user/site/vendor/craftcms/cms/src/services/Elements.php(1337): craft\services\Elements->_saveElementInternal()
#19 /home/user/site/vendor/craftcms/cms/src/controllers/ElementsController.php(1887): craft\services\Elements->saveElement()
#20 [internal function]: craft\controllers\ElementsController->actionSaveDraft()
#21 /home/user/site/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array()
#22 /home/user/site/vendor/yiisoft/yii2/base/Controller.php(178): yii\base\InlineAction->runWithParams()
#23 /home/user/site/vendor/yiisoft/yii2/base/Module.php(552): yii\base\Controller->runAction()
#24 /home/user/site/vendor/craftcms/cms/src/web/Application.php(361): yii\base\Module->runAction()
#25 /home/user/site/vendor/craftcms/cms/src/web/Application.php(660): craft\web\Application->runAction()
#26 /home/user/site/vendor/craftcms/cms/src/web/Application.php(323): craft\web\Application->_processActionRequest()
#27 /home/user/site/vendor/yiisoft/yii2/base/Application.php(384): craft\web/Application->handleRequest()
#28 /home/user/site/web/index.php(21): yii\base\Application->run()
#29 {main}

Edit: I see an update might resolve this: https://github.com/craftcms/cms/issues/17268#issuecomment-2922856795. Will give that a go.

johnnynotsolucky avatar Jul 04 '25 08:07 johnnynotsolucky