PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Crie uma matriz de postgres de domínio personalizado


Outra solução possível é:
CREATE TYPE foo_tup AS (item foo);

Os tipos de domínio podem ser agrupados em tuplas como esta e isso fornece um construtor de matriz. A desvantagem é que agora você provavelmente deseja criar elencos:
select array[row('foo')::foo_tup, row('bar')];

Por exemplo, você pode criar uma função e um cast:
create function foo_tup(foo) returns foo_tup language sql as $$
    select row($1)::foo_tup;
$$ immutable;
create function foo(foo_tup) returns foo language sql as $$
     select $1.item;
$$;
create cast (foo as foo_tup) with function foo_tup(foo);
create cast (foo_tup as foo) with function foo(foo_tup);

Então a agregação se torna fácil:
select array_agg(myfoo::foo_tup) from my_table; 

embora você obtenha parênteses extras.