Pimcore安装出错: * WITH RECURSIVE is required
什么是 CTE?
CTE(公用表表达式)也称为子句WITH,是一种 SQL 功能,它返回可供其他查询使用的临时数据集。由于它是临时结果,因此不会存储在任何地方,但仍然可以像引用任何其他表一样引用它。
CTE 有两种类型:非递归和递归。
WITH RECURSIVE
查询也叫递归查询,语法如下:
WITH RECURSIVE cte_name AS ( cte_query_definition (the anchor member) UNION ALL cte_query_definition (the recursive member) ) SELECT * FROM cte_name;
如果您希望 CTE 是递归的,那么在WITH编写RECURSIVE
关键字之后。然后一切如常:AS
后面是带有 CTE
查询定义的括号。第一个查询定义称为锚成员。
要将锚成员与递归成员连接起来,需要使用UNION
或者UNION ALL
命令。显然,递归成员是 CTE
的递归部分,它将引用 CTE
本身。
Pimcore安装出现的WITH RECURSIVE is required
错误
解决这个问题的办法有两个:
一 注释检测代码段
找到 vendor/pimcore/pimcore/lib/Tool/Requirements.php
,大约328
行
$queryCheck = true; try { $db->executeQuery( 'WITH RECURSIVE counter AS ( SELECT 1 as n UNION ALL SELECT n + 1 FROM counter WHERE n < 10 ) SELECT * from counter' ); } catch (\Exception $e) { $queryCheck = false; } $checks[] = new Check([ 'name' => 'WITH RECURSIVE', 'state' => $queryCheck ? Check::STATE_OK : Check::STATE_ERROR, ]);
把这段代码注释掉。
二 升级mysql至8.0