Criando tipos de dados compostos (composite types) no PostgreSQL
O PostgreSQL te permite criar seus próprios tipos de dados.
Um desses tipos de dados é o "dado composto". O tipo composto é basicamente: duas ou mais colunas, com nomes próprios e tipos diferentes, em uma só coluna.
Para criar um tipo novo:
CREATE TYPE retangulo AS (altura double precision, largura double precision );
Mas e agora, como eu uso esse tipo?
Posso criar ele na mão dessa forma:
SELECT ROW(1.0, 2.0)::retangulo;-- Ou de forma abreviada: SELECT (1.0, 2.0)::retangulo;
Ou adicionar ele numa tabela:
CREATE TABLE retangulos(retangulo_id SERIAL PRIMARY KEY, retangulo RETANGULO );
Posso acessar ele dessa forma:
SELECT x.altura, x.larguraFROM x; -- Ou de uma forma testável SELECT (ROW(1.0, 2.0)::retangulo).altura, (ROW(1.0, 2.0)::retangulo).largura ; -- Ou ainda de outra forma testável (várias linhas) SELECT v.column1, (v.column1).altura, (v.column1).largura FROM ( VALUES (ROW(1,2)::retangulo), (ROW(2,3)::retangulo), (ROW(4,5)::retangulo) ) AS v;
Referências
Documentação oficial - Tipos compostos no PostgreSQL
https://www.postgresql.org/docs/current/rowtypes.html