sql >> Databasteknik >  >> RDS >> PostgreSQL

Skapa en rad anpassade postgres för domäner

En annan möjlig lösning är:

CREATE TYPE foo_tup AS (item foo);

Domäntyper kan lindas in i tuplar som denna och det ger dig en arraykonstruktor. Nackdelen är att nu du förmodligen vill skapa casts:

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

Du kan till exempel skapa en funktion och en 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);

Då blir aggregering lätt:

select array_agg(myfoo::foo_tup) from my_table; 

fast du får extra parentes.




  1. orakelidentifierare för viloläge är för lång ORA-00972

  2. 2 sätt att få de teckenuppsättningar som finns tillgängliga i MariaDB

  3. MySql kopieringsvärde från en rad till en annan

  4. MySQL - Hitta MIN men inte noll