PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Créer un tableau de postgres de domaine personnalisés

Une autre solution de contournement possible est :

CREATE TYPE foo_tup AS (item foo);

Les types de domaine peuvent être enveloppés dans des tuples comme celui-ci et cela vous donne un constructeur de tableau. L'inconvénient est maintenant que vous souhaitez probablement créer des distributions :

select array[row('foo')::foo_tup, row('bar')];

Par exemple, vous pouvez créer une fonction et un 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);

Ensuite, l'agrégation devient facile :

select array_agg(myfoo::foo_tup) from my_table; 

bien que vous obteniez des parenthèses supplémentaires.