PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Създайте масив от потребителски домейн postgres

Друго възможно решение е:

CREATE TYPE foo_tup AS (item foo);

Типовете домейни могат да бъдат обвити в кортежи като този и това ви дава конструктор на масиви. Недостатъкът е, че сега вероятно искате да създадете кастинги:

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

Например можете да създадете функция и каст:

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

Тогава агрегирането става лесно:

select array_agg(myfoo::foo_tup) from my_table; 

въпреки че получавате допълнителни скоби.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да се справя с отварянето/затварянето на Db връзка в Go приложение?

  2. SQL Not Empty вместо Not NULL

  3. Rails Свързване към база данни, зададена от database.yml

  4. Последователността не се нулира след съкращаване на таблицата

  5. jOOQ EXTRACT(EPOCH FROM [поле]) заобиколно решение?