PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Erstellen Sie ein Array von Postgres für benutzerdefinierte Domänen

Eine andere mögliche Problemumgehung ist:

CREATE TYPE foo_tup AS (item foo);

Domänentypen können wie folgt in Tupel verpackt werden, und das gibt Ihnen einen Array-Konstruktor. Der Nachteil ist, dass Sie jetzt wahrscheinlich Umwandlungen erstellen möchten:

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

Sie könnten zum Beispiel eine Funktion und einen Cast erstellen:

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

Dann wird die Aggregation einfach:

select array_agg(myfoo::foo_tup) from my_table; 

obwohl Sie zusätzliche Klammern erhalten.