sql >> Database >  >> RDS >> PostgreSQL

Maak een reeks van aangepaste domeinen postgres

Een andere mogelijke oplossing is:

CREATE TYPE foo_tup AS (item foo);

Domeintypen kunnen op deze manier in tupels worden verpakt en dat geeft je een array-constructor. Het nadeel is dat je nu waarschijnlijk casts wilt maken:

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

U kunt bijvoorbeeld een functie en een cast maken:

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);

Dan wordt aggregatie eenvoudig:

select array_agg(myfoo::foo_tup) from my_table; 

hoewel je extra haakjes krijgt.




  1. Npgsql 4.0-parameters en nulwaarden

  2. Beste opslagengine voor voortdurend veranderende gegevens

  3. Beperkingen toevoegen met behulp van subquery's uit een andere tabel

  4. groeperen op maandnaam in sql