Я пытаюсь создать функцию, которая рекурсивно вычисляет, какие числа являются надмножествами ввода, будучи подмножествами другой таблицы.Когда я добавляю массивы (являющиеся набором чисел, с которыми я работаю), массив добавляется как [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)