[英]Intersection of array with select statement in postgres
我正在尝试将select语句与在循环中动态计算的数组进行相交,然后测量每个相交查询所花费的时间。
因此,在循环的第一次迭代中,我希望查询如下所示:
'select sub_id from table where main_id=1 INTERSECT select array[''80'']';
在第二次迭代中:
'select sub_id from table where main_id=1 INTERSECT select array[''80'', ''81'']';
等等,并测量每次迭代执行查询所花费的时间。
运行此脚本时,出现错误:
上下文:PL / pgSQL函数inline_code_block在分配时
对应于我初始化query1的行。 如何更正对query1的分配? 我正在使用PostgreSQL 9.1。
arr := '{}';
for j in 80..120 loop
arr := array_append(arr, j::text);
query1 := 'select sub_id from table where main_id=1 INTERSECT' || ' select unnest(arr)';
execute 'explain (analyse, format json) ' || query1 into p;
t := (p->0->>'Planning Time')::float + (p->0->>'Execution Time')::float;
total_time := total_time + t;
end loop;
您execute
的查询文本无法引用调用范围中的变量。 您必须using
like将变量作为参数传递:
query1 := 'select sub_id from YourTable where main_id=1 INTERSECT select unnest($1)';
execute 'explain (analyse, format json) ' || query1 using arr into p;
^^^^^^^^^
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.