postgres中的类型不匹配INTERSECT

时间:2017-10-03 14:46:20

标签: sql postgresql postgresql-9.1

我正在尝试使用select语句的交叉,该语句检索text []并将其与我动态计算的text []相交。

当我运行此脚本时,我收到错误

  

错误:INTERSECT类型text []和文本无法匹配

如何解决此错误?

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 |              | 

1 个答案:

答案 0 :(得分:2)

sub_id是一个数组。 arr是一个数组,但是你要删除它 - 所以现在它的(文本)值序列。您正在尝试对数组和文本值进行INTERSECT。要修复它,要么两者都不需要,要么两者都不需要。 (但是选择正确的一个,因为每个的结果都不同 - 你要么在数组本身上交叉,要么在数组中包含的值上相交。)

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