в PostgreSQL все типы, включая определенные пользователем, имеют соответствующие типы массивов.
поэтому, если вы объявите составной тип, у вас также будет тип массива. Вы можете найти информацию о составных типах здесь: https://www.postgresql.org/docs/current/static/rowtypes.html
вот пример:
1) создать новый составной тип
CREATE TYPE "myType" AS ( "id" INT, "name" VARCHAR );
2) продемонстрировать представление массива. тип результата "myType" []
SELECT
ARRAY_AGG( v::"myType" ) AS v
FROM
( VALUES ( 1, 'a' ), ( 2, 'b' ), ( 3, 'c' ), ( 4, 'd' ) ) AS v
результат: {"(1, a)", "(2, b)", "(3, c)", "(4, d)"}
3) отключение массива myType [] и возврат в виде записей
SELECT ( UNNEST( '{"(1,a)","(2,b)","(3,c)","(4,d)"}'::"myType"[] ) ).*
результат:
id | name
---|-----
1 | a
2 | b
3 | c
4 | d