Pular para o conteúdo

Desaninha o array e retorna o conjunto de elementos.

func.unnest( <array> )
func.unnest([1, 2])
┌──────────────────────┐
│ func.unnest([1, 2]) │
├──────────────────────┤
│ 1 │
│ 2 │
└──────────────────────┘
UNNEST( <array> )
SELECT UNNEST([1, 2]);
┌─────────────────┐
│ unnest([1, 2]) │
├─────────────────┤
│ 1 │
│ 2 │
└─────────────────┘
-- UNNEST(array) can be used as a table function.
SELECT * FROM UNNEST([1, 2]);
┌─────────────────┐
│ value │
├─────────────────┤
│ 1 │
│ 2 │
└─────────────────┘

Nos exemplos abaixo, usaremos a seguinte tabela chamada contacts, com a coluna phones definida como um array de texto.

CREATE TABLE contacts (
id SERIAL PRIMARY KEY,
name VARCHAR (100),
phones TEXT []
);

A coluna phones é um array unidimensional que armazena os vários números de telefone que um contato pode ter.

Para definir um array multidimensional, adicione os colchetes.

Por exemplo, você pode definir um array bidimensional da seguinte forma:

column_name data_type [][]

Um exemplo de inserção de dados nessa tabela

INSERT INTO contacts (name, phones)
VALUES('John Doe',ARRAY [ '(408)-589-5846','(408)-589-5555' ]);

ou

INSERT INTO contacts (name, phones)
VALUES('Lily Bush','{"(408)-589-5841"}'),
('William Gate','{"(408)-589-5842","(408)-589-5843"}');

A função unnest() expande um array em uma lista de linhas. Por exemplo, a consulta a seguir expande todos os números de telefone do array phones.

SELECT
name,
unnest(phones)
FROM
contacts;

Saída:

name unnest
John Doe (408)-589-5846
John Doe (408)-589-5555
Lily Bush (408)-589-5841
William Gate (408)-589-5843