2017-10-03 11 views
0

私は、テキスト[]を検索し、それをテキスト[]と交差させて、私が動的に計算するselect文の交差をしようとしています。ポストグルのタイプの不一致INTERSECT

私はこのスクリプトを実行すると、私はこのエラーをどのように修正すればよい

ERROR: INTERSECT types text[] and text cannot be matched

エラーが出ますか?私のテーブルの

do $$ 
declare 
    p json; 
    total_time float; 
    t float; 
    arr text[]; 
    query1 text; 
    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($1)'; 
     execute 'explain (analyse, format json) ' || query1 using arr into p; 
     t := (p->0->>'Planning Time')::float + (p->0->>'Execution Time')::float; 
     total_time := total_time + t; 
    end loop; 

スキーマ:

db=# \d+ table 
          Table "table" 
    Column  | Type | Modifiers | Storage | Stats target | Description 
---------------+---------+-----------+----------+--------------+------------- 
main_id  | integer |   | plain |    | 
sub_id  | text[] |   | extended |    | 

答えて

2

sub_idが配列です。 arrは配列ですが、あなたはそれをネストしていません - それでは(テキスト)値のシーケンスです。配列とテキスト値のINTERSECTを実行しようとしています。それを修正するには、両方をアンネストするか、どちらもアンネストしないでください。 (ただし、それぞれの結果が異なるため、正しい配列を選択してください - 配列自体と交差しているか、配列に含まれている値に交差しています)。

SELECT UNNEST(sub_id) FROM table WHERE main_id = 1 
INTERSECT 
SELECT UNNEST(arr)