sql >> Databáze >  >> RDS >> PostgreSQL

Vytvořte pole vlastních domén postgres

Další možné řešení je:

CREATE TYPE foo_tup AS (item foo);

Typy domén lze zabalit do n-tic, jako je tento, a to vám poskytne konstruktor pole. Nevýhodou je, že nyní pravděpodobně budete chtít vytvářet odlitky:

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

Můžete například vytvořit funkci a přetypování:

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

Pak je agregace snadná:

select array_agg(myfoo::foo_tup) from my_table; 

i když dostanete další závorky.




  1. Dotaz byl prázdný Chyba PHP

  2. SQL - Jak získám pouze čísla za desetinnou čárkou?

  3. Chyba ORA-00932 při použití výběru s polem Union a CLOB

  4. PostgreSQL na Dockeru:Jak nainstalovat a spustit závislosti pythonu pod `plpython3u`?