Shopware 6.5 - Function or Expression 'variant_listing_config' cannot be used in the CHECK clause
Error message
When updating Shopware from version 6.4
to 6.5
the following error message appears:
SQLSTATE[HY000]:
General error: 1901
Function or expression 'variant_listing_config' cannot be used in the CHECK clause of `variant_listing_config`
The error occurs regardless of the MariaDB version used. Therefore all MariaDB versions are affected: 10.3
, 10.4
, 10.5
, 10.6
, 10.7
, 10.8
, 10.9
, 10.10
, 10.11
, 11
, 11.1
, 11.2
, 11.3
.
Problem solution
Shopware provides an update migration in version 6.5.6.0
to solve the problem. Unfortunately, the problem is only solved in version 6.5.6.0, which is why the update to 6.5 still fails.
Before executing the following MySQL commands, create a server snapshot or a server backup in order to be able to return to the previous status in the event of an error.
Execute the following database commands via the MySQL CLI or PhpMyAdmin before updating to 6.5 to solve the problem:
# Create temporary database table
CREATE TABLE IF NOT EXISTS `product_tmp` (
`id` BINARY(16) NOT NULL,
`version_id` BINARY(16) NOT NULL,
`variant_listing_config` JSON NULL DEFAULT NULL,
PRIMARY KEY (`id`, `version_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
# Add products to the temporary table that contain a variant_listing_config
INSERT INTO `product_tmp` (SELECT `id`, `version_id`, `variant_listing_config` FROM `product` WHERE variant_listing_config IS NOT NULL)
# Remove the variant_listing_config column from the product table
ALTER TABLE `product` DROP COLUMN `variant_listing_config`
# Add the variant_listing_config again (without the check clause)
ALTER TABLE `product` ADD COLUMN `variant_listing_config` JSON NULL DEFAULT NULL
# Add the outsourced products
UPDATE `product`
SET product.variant_listing_config = (SELECT variant_listing_config FROM product_tmp WHERE product.id = product_tmp.id AND product.version_id = product_tmp.version_id)
WHERE product.variant_listing_config IS NULL AND EXISTS (SELECT variant_listing_config FROM product_tmp WHERE product.id = product_tmp.id AND product.version_id = product_tmp.version_id)
# Removal of the temporary database table
DROP TABLE `product_tmp`
Then carry out the Shopware update to 6.5
.
Shopware 6.5 Update with Composer
bin/console system:update:prepare
composer update
bin/console system:update:finish
# Force update of all configuration files
composer recipes:update
After completing the Shopware update, you will receive the following output:
Shopware has been successfully updated to 6.5
.
Frequent error messages
/usr/bin/env: "php": File or directory not found
If the PHP environment configuration cannot be found, the PHP binary is missing in the bash profile. Execute the following command to set PHP 8.2 as the default CLI version:
echo "export PATH=/opt/plesk/php/8.2/bin:$PATH;" >> ~/.bash_profile
Error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 315392 bytes)
If the defined memory limit is exceeded, you can use the Shopware CLI with unlimited memory.
php -d memory_limit=-1 bin/console system:update:finish
Sources
Shopware 6.5.6.0 Migration: