作为这个问题的后续行动:
我试着:
perform (with test_as_cte as(select * from myTable) select * from test_as_cte);但是,得到以下错误:
SQL 42601: ERROR:子查询必须只返回一个列,其中: PL/pgSQL函数inline_code_block第9行执行
如果我在上面的代码中用*替换myCol,那么没有错误。
但是,我需要对CTE进行真实的性能测试,并返回多个列。
发布于 2022-02-08 21:43:37
括在括号中的WITH查询被视为子select。只要它返回一个单个值(一行中的一列),它的工作方式就很好。否则,您必须将其视为子查询,并按如下方式调用它(在PL/pgSQL代码块中):
PERFORM * FROM (with test_as_cte as (select * from b2) select * from test_as_cte t) sub;或者只是:
PERFORM FROM (<any SELECT query>) sub;
PERFORMquery; 这将执行query并丢弃结果。编写查询的方式与编写SQLSELECT命令的方式相同,但将初始关键字SELECT替换为PERFORM。对于WITH查询,请使用PERFORM,然后将查询放在括号中。(在这种情况下,查询只能返回一行。)
我想这会更清楚些。我建议对文件进行修正。
https://stackoverflow.com/questions/71040855
复制相似问题