Một giải pháp khả thi khác là:
CREATE TYPE foo_tup AS (item foo);
Các loại miền có thể được bao bọc trong các bộ giá trị như thế này và điều đó cung cấp cho bạn một phương thức khởi tạo mảng. Nhược điểm là bây giờ bạn có thể muốn tạo phôi:
select array[row('foo')::foo_tup, row('bar')];
Ví dụ:bạn có thể tạo một hàm và một diễn viê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);
Sau đó, việc tổng hợp trở nên dễ dàng:
select array_agg(myfoo::foo_tup) from my_table;
mặc dù bạn có thêm dấu ngoặc đơn.