2017-10-03 11 views
2

私はループで動的に計算された配列とselect文の交差を試み、それらの各交差問合せにかかる時間を測定しようとしています。postgresでselect文を使ってarrayを交差させる

ので、ループの最初の繰り返しで、私は、クエリは次のようになりたい:第2の繰り返しで

'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'']'; 

などとにかかった時間を計測しますクエリを実行するそれぞれの繰り返し

私はこのスクリプトを実行すると、私はエラーを取得:

CONTEXT: PL/pgSQL function inline_code_block at assignment

私は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; 
+0

を。それはデバッグ情報です。おそらく、ログまたは出力の前の行にエラーがあります。 –

答えて

3

クエリテキストexecuteは、呼び出し元スコープの変数を参照できません。あなたはusing等をパラメータとして変数を渡す必要があります。エラーではありません

query1 := 'select sub_id from YourTable where main_id=1 INTERSECT select unnest($1)'; 
execute 'explain (analyse, format json) ' || query1 using arr into p; 
                ^^^^^^^^^ 

Working example at rextester.com

関連する問題