Upgrade to 5.48.0 fails with DB Error: constraint violation
Overview
Error message during upgrade stage: [Error: Finish core DB updates 5.48.0] Exception: "API error: DB Error: constraint violation on ReportTemplate.create"
Reproduction steps
- Run upgrade, receive error during database upgrade for 5.48.0.
Current behaviour
Backtrace displayed below
Apr 10 12:30:50 [debug] $backTrace = #0 D:\httproot\wp-content\plugins\civicrm\civicrm\CRM\Core\Error.php(941): CRM_Core_Error::backtrace("backTrace", TRUE)
#1 D:\httproot\wp-content\plugins\civicrm\civicrm\vendor\pear\pear-core-minimal\src\PEAR.php(922): CRM_Core_Error::exceptionHandler(Object(DB_Error))
#2 D:\httproot\wp-content\plugins\civicrm\civicrm\vendor\pear\db\DB.php(997): PEAR_Error->__construct("DB Error: constraint violation", -3, 16, (Array:2), "UPDATE `civicrm_option_value` SET `option_group_id` = 40 , `label` = 'Exten...")
#3 D:\httproot\wp-content\plugins\civicrm\civicrm\vendor\pear\pear-core-minimal\src\PEAR.php(575): DB_Error->__construct(-3, 16, (Array:2), "UPDATE `civicrm_option_value` SET `option_group_id` = 40 , `label` = 'Exten...")
#4 D:\httproot\wp-content\plugins\civicrm\civicrm\vendor\pear\pear-core-minimal\src\PEAR.php(223): PEAR::_raiseError(Object(DB_mysqli), NULL, -3, 16, (Array:2), "UPDATE `civicrm_option_value` SET `option_group_id` = 40 , `label` = 'Exten...", "DB_Error", TRUE)
#5 D:\httproot\wp-content\plugins\civicrm\civicrm\vendor\pear\db\DB\common.php(1928): PEAR->__call("raiseError", (Array:7))
#6 D:\httproot\wp-content\plugins\civicrm\civicrm\vendor\pear\db\DB\mysqli.php(936): DB_common->raiseError(-3, NULL, NULL, "UPDATE `civicrm_option_value` SET `option_group_id` = 40 , `label` = 'Exten...", "1452 ** Cannot add or update a child row: a foreign key constraint fails (`in...")
#7 D:\httproot\wp-content\plugins\civicrm\civicrm\vendor\pear\db\DB\mysqli.php(406): DB_mysqli->mysqliRaiseError()
#8 D:\httproot\wp-content\plugins\civicrm\civicrm\vendor\pear\db\DB\common.php(1234): DB_mysqli->simpleQuery("UPDATE `civicrm_option_value` SET `option_group_id` = 40 , `label` = 'Exten...")
#9 D:\httproot\wp-content\plugins\civicrm\civicrm\packages\DB\DataObject.php(2696): DB_common->query("UPDATE `civicrm_option_value` SET `option_group_id` = 40 , `label` = 'Exten...")
#10 D:\httproot\wp-content\plugins\civicrm\civicrm\packages\DB\DataObject.php(1539): DB_DataObject->_query("UPDATE `civicrm_option_value` SET `option_group_id` = 40 , `label` = 'Exten...")
#11 D:\httproot\wp-content\plugins\civicrm\civicrm\CRM\Core\DAO.php(640): DB_DataObject->update()
#12 D:\httproot\wp-content\plugins\civicrm\civicrm\CRM\Core\BAO\OptionValue.php(218): CRM_Core_DAO->save()
#13 D:\httproot\wp-content\plugins\civicrm\civicrm\CRM\Core\BAO\OptionValue.php(34): CRM_Core_BAO_OptionValue::add((Array:9))
#14 D:\httproot\wp-content\plugins\civicrm\civicrm\api\v3\utils.php(1315): CRM_Core_BAO_OptionValue::create((Array:9))
#15 D:\httproot\wp-content\plugins\civicrm\civicrm\api\v3\OptionValue.php(54): _civicrm_api3_basic_create("CRM_Core_BAO_OptionValue", (Array:9), "OptionValue")
#16 D:\httproot\wp-content\plugins\civicrm\civicrm\api\v3\ReportTemplate.php(55): civicrm_api3_option_value_create((Array:9))
#17 D:\httproot\wp-content\plugins\civicrm\civicrm\Civi\API\Provider\MagicFunctionProvider.php(89): civicrm_api3_report_template_create((Array:9))
#18 D:\httproot\wp-content\plugins\civicrm\civicrm\Civi\API\Kernel.php(149): Civi\API\Provider\MagicFunctionProvider->invoke((Array:8))
#19 D:\httproot\wp-content\plugins\civicrm\civicrm\Civi\API\Kernel.php(81): Civi\API\Kernel->runRequest((Array:8))
#20 D:\httproot\wp-content\plugins\civicrm\civicrm\api\api.php(22): Civi\API\Kernel->runSafe("ReportTemplate", "create", (Array:8))
#21 D:\httproot\wp-content\plugins\civicrm\civicrm\CRM\Core\ManagedEntities.php(381): civicrm_api("ReportTemplate", "create", (Array:8))
#22 D:\httproot\wp-content\plugins\civicrm\civicrm\CRM\Core\ManagedEntities.php(187): CRM_Core_ManagedEntities->updateExistingEntity(Object(CRM_Core_DAO_Managed), (Array:10))
#23 D:\httproot\wp-content\plugins\civicrm\civicrm\CRM\Core\ManagedEntities.php(167): CRM_Core_ManagedEntities->reconcileEnabledModule("nz.co.fuzion.extendedreport")
#24 D:\httproot\wp-content\plugins\civicrm\civicrm\CRM\Core\ManagedEntities.php(128): CRM_Core_ManagedEntities->reconcileEnabledModules()
#25 D:\httproot\wp-content\plugins\civicrm\civicrm\CRM\Core\Invoke.php(413): CRM_Core_ManagedEntities->reconcile()
#26 D:\httproot\wp-content\plugins\civicrm\civicrm\CRM\Upgrade\Form.php(818): CRM_Core_Invoke::rebuildMenuAndCaches(FALSE, FALSE)
#27 D:\httproot\wp-content\plugins\civicrm\civicrm\CRM\Queue\Task.php(73): CRM_Upgrade_Form::doCoreFinish(Object(CRM_Queue_TaskContext), "5.48.beta2", "5.48.0", "5.48.0", "C:\Windows\Temp\civB84B.tmp")
#28 D:\httproot\wp-content\plugins\civicrm\civicrm\CRM\Queue\Runner.php(215): CRM_Queue_Task->run(Object(CRM_Queue_TaskContext))
#29 D:\httproot\wp-content\plugins\civicrm\civicrm\CRM\Queue\Page\AJAX.php(36): CRM_Queue_Runner->runNext(TRUE)
#30 D:\httproot\wp-content\plugins\civicrm\civicrm\CRM\Queue\ErrorPolicy.php(89): CRM_Queue_Page_AJAX::{closure}()
#31 D:\httproot\wp-content\plugins\civicrm\civicrm\CRM\Queue\Page\AJAX.php(38): CRM_Queue_ErrorPolicy->call(Object(Closure))
#32 D:\httproot\wp-content\plugins\civicrm\civicrm\CRM\Core\Invoke.php(285): CRM_Queue_Page_AJAX::runNext()
#33 D:\httproot\wp-content\plugins\civicrm\civicrm\CRM\Core\Invoke.php(69): CRM_Core_Invoke::runItem((Array:13))
#34 D:\httproot\wp-content\plugins\civicrm\civicrm\CRM\Core\Invoke.php(36): CRM_Core_Invoke::_invoke((Array:5))
#35 D:\httproot\wp-content\plugins\civicrm\civicrm.php(1199): CRM_Core_Invoke::invoke((Array:5))
#36 D:\httproot\wp-includes\class-wp-hook.php(307): CiviCRM_For_WordPress->invoke("")
#37 D:\httproot\wp-includes\class-wp-hook.php(331): WP_Hook->apply_filters("", (Array:1))
#38 D:\httproot\wp-includes\plugin.php(474): WP_Hook->do_action((Array:1))
#39 D:\httproot\wp-admin\admin.php(259): do_action("toplevel_page_CiviCRM")
#40 {main}
Apr 10 12:30:50 [info] $ManagedEntities_failed = Array
(
[entity] => ReportTemplate
[action] => create
[params] => Array
(
[id] => 1043
[is_active] => 1
[version] => 3
[label] => Extended Report - Grant Detail
[description] => Extended Report - Grant Detail
[class_name] => CRM_Extendedreport_Form_Report_Grant_Detail
[report_url] => grant/detailextended
[component] => CiviGrant
)
[result] => Array
(
[error_code] => constraint violation
[sql] => UPDATE `civicrm_option_value` SET `option_group_id` = 40 , `label` = 'Extended Report - Grant Detail' , `value` = 'grant/detailextended' , `name` = 'CRM_Extendedreport_Form_Report_Grant_Detail' , `description` = 'Extended Report - Grant Detail' , `is_active` = 1 , `component_id` = 0 WHERE ( `civicrm_option_value`.`id` = 1043 ) [nativecode=1452 ** Cannot add or update a child row: a foreign key constraint fails (`client_crm`.`civicrm_option_value`, CONSTRAINT `FK_civicrm_option_value_component_id` FOREIGN KEY (`component_id`) REFERENCES `civicrm_component` (`id`))]
[tip] => add debug=1 to your API call to have more info about the error
[is_error] => 1
[error_message] => DB Error: constraint violation
[debug_information] => UPDATE `civicrm_option_value` SET `option_group_id` = 40 , `label` = 'Extended Report - Grant Detail' , `value` = 'grant/detailextended' , `name` = 'CRM_Extendedreport_Form_Report_Grant_Detail' , `description` = 'Extended Report - Grant Detail' , `is_active` = 1 , `component_id` = 0 WHERE ( `civicrm_option_value`.`id` = 1043 ) [nativecode=1452 ** Cannot add or update a child row: a foreign key constraint fails (`client_crm`.`civicrm_option_value`, CONSTRAINT `FK_civicrm_option_value_component_id` FOREIGN KEY (`component_id`) REFERENCES `civicrm_component` (`id`))]
)
)
Expected behaviour
No fatal error during upgrade
Environment information
- Browser: Firefox 99.0
- CiviCRM: 5.48.0, upgrading from 5.42.0
- PHP: 7.4_
- CMS: WordPress 5.9.3
- Database: MySQL 5.7 (Amazon Aurora)
- Web Server: IIS
Comments
The installation seems to be usable, but is in some sort of limbo:
- The version displayed at the bottom of every page is now 5.48.0: "Powered by CiviCRM 5.48.0."
- When I try to re-run the upgrade, I get the same failure message every time.
- The System Status page shows the 5.48.0 upgrade (and a number of other versions) being available.