PSQL - диапазон фрагмента индекса, отображаемого перед массивом при добавлении в таблицу - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь создать функцию, которая рекурсивно вычисляет, какие числа являются надмножествами ввода, будучи подмножествами другой таблицы.Когда я добавляю массивы (являющиеся набором чисел, с которыми я работаю), массив добавляется как [0: 2] = {2,3,4}, а не просто {2,3,4}.

Почему это может быть?

Определение функций и необходимые таблицы приведены ниже.

create table A(x integer);

insert into A(x)
values (1), (2), (3), (4);

create table AllSets(x int[]);
create table SuperSets(x int[]);

create or replace function superSetsOfSet(prev int[], i integer)
    returns void as
$$
declare
    newval integer := 0;
    arraySize integer := 0;
begin
  raise notice 'prev =%', prev;
  insert into AllSets(x) values (prev);

  loop
    exit when i = (select count(*) from A);
    select into newval x from A offset(i) limit 1;
    --raise notice 'New Val: %,', newval;
    select into arraySize cardinality(prev);
    --raise notice 'A size: %,', arraySize;
    prev[arraySize] := newval;
    --raise notice 'prev: %', prev;
    insert into SuperSets(x) values (prev);
    perform superSetsOfSet(prev, i + 1);
    prev = (select prev[1:array_upper(prev, 1) - 1]);
    i := i + 1;
  end loop;
end;
$$ language plpgsql;

Вывод выглядит как:

nd=# select * from supersetsofset('{}', 0);

 supersetsofset
----------------

(1 row)

nd=# select * from allsets;
        x
-----------------
 {}
 [0:0]={1}
 [0:1]={1,2}
 [0:2]={1,2,3}
 [0:3]={1,2,3,4}
 {4}
 [0:0]={3}
 [0:1]={3,4}
 [0:0]={4}
 [0:0]={2}
 [0:1]={2,3}
 [0:2]={2,3,4}
 [0:0]={4}
 [0:0]={3}
 [0:1]={3,4}
 [0:0]={4}

 (16 rows)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...