CREATE OR REPLACE FUNCTION powerset(text) returns setof text language plperl
as $$
my @elements = split /,/, shift;
use Data::PowerSet; # document dependency explicitly
my $d = Data::PowerSet->new(@elements);
while (my $r = $d->next) {
return_next join ",", @$r;
}
return undef;
$$;
SELECT powerset('red,green,blue');
SELECT count(*) from powerset('a,b,c,d,e,f,g,h,i,j,k,l,m,n');
CREATE OR REPLACE FUNCTION call_powerset_via_spi() returns text language plperl
as $$
$sql = "SELECT count(*) from powerset('a,b,c,d,e,f,g,h,i,j,k,l,m,n')";
return spi_exec_query($sql)->{rows}[0]{count};
$$;
SELECT call_powerset_via_spi();