Provavelmente você já ouviu falar de arrays. Em várias linguagens de programação eles significam quase a mesma coisa. Mas tem uns detalhes.
Um array no PostgreSQL é um tipo de dado que deixa você guardar um conjunto de valores do mesmo tipo numa única coluna da tabela. É como se você colocasse não só um registro, mas uma "caixa" de dados dentro de uma célula. Pode ser uma lista de números, strings, datas ou até objetos mais complexos.
Falando de um jeito mais abstrato, um array é tipo uma caixa de ferramentas. Em vez de carregar um monte de chaves na mão (cada chave como uma coluna/linha separada), você coloca tudo numa maleta (uma coluna só, com array).
Dois jeitos de criar arrays
No PostgreSQL tem dois jeitos principais de criar arrays. É tipo dois jeitos diferentes de arrumar a mala — o resultado é igual, mas o jeito de fazer muda:
- Sintaxe com chaves
{}
Esse é o jeito mais compacto e usado:
-- Array de strings
'{"maca", "banana", "cereja"}'
-- Array de números
'{1, 2, 3, 4, 5}'
-- Array de datas
'{"2023-01-01", "2023-01-02", "2023-01-03"}'
- Sintaxe com construtor
ARRAY[]
Um jeito mais explícito e fácil de ler:
-- Array de strings
ARRAY['maca', 'banana', 'cereja']
-- Array de números
ARRAY[1, 2, 3, 4, 5]
-- Array de datas
ARRAY['2023-01-01'::DATE, '2023-01-02'::DATE, '2023-01-03'::DATE]
os dois jeitos funcionam igual! Você escolhe o que preferir ou o que faz mais sentido no contexto. É tipo escolher entre for e while em outras linguagens — fazem a mesma coisa, mas um pode ser mais prático em certa situação.
Quando usar arrays
Arrays são tipo superpoder do PostgreSQL, que resolve situações onde seria chato criar tabelas ou colunas extras. Eles são ótimos para:
- Guardar listas, tags ou categorias
Imagina que a gente tá criando um banco de dados pra uma loja online. Cada produto pode ter várias tags, tipo:
- Pra uma camiseta, as tags podem ser:
["roupa", "masculino", "esporte"]. - Pra um fone de ouvido:
["eletronica", "sem fio", "gadgets"].
Com arrays, você guarda essas tags numa coluna só, sem precisar criar uma tabela separada pra tags, economizando espaço e deixando a estrutura mais simples.
-- Tabela de produtos com array de tags
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
tags TEXT[] -- Array de strings pras tags
);
-- Exemplo de dados
INSERT INTO products (name, tags)
VALUES
('Camiseta', ARRAY['roupa', 'masculino', 'esporte']),
('Fone de ouvido', ARRAY['eletronica', 'sem fio', 'gadgets']);
- Guardar lista de pedidos
Se você trabalha com pedidos, um array pode ajudar a guardar a lista de produtos de um pedido só:
-- Tabela de pedidos com array de IDs de produtos
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
customer_name TEXT,
product_ids INTEGER[] -- Array de IDs dos produtos
);
-- Exemplo de dados
INSERT INTO orders (customer_name, product_ids)
VALUES
('Anna', ARRAY[1, 2, 3]),
('Otto', ARRAY[4, 5]);
Agora, cada pedido tem a lista dos produtos comprados. Prático, né?
Configurações e preferências simples
Quando você precisa guardar listas simples de configurações ou preferências do usuário:
CREATE TABLE user_preferences ( user_id INTEGER PRIMARY KEY, notification_types TEXT[], allowed_days INTEGER[] -- dias da semana: 1-7 );
Comparando arrays com outros tipos de dados
Aqui é importante entender que arrays são só mais uma ferramenta no PostgreSQL, e não servem pra tudo. Por exemplo, uma alternativa é usar tabela de relação (relação "muitos pra muitos") ou usar tipo JSON/JSONB.
Arrays vs JSONB
Arrays são bons quando você sabe que vai guardar vários valores do mesmo tipo. Eles são mais simples, rápidos e ocupam menos espaço.
JSONB é melhor pra estruturas mais complexas, tipo quando você precisa guardar objetos com estrutura flexível. Mas JSONB pode ser mais chato de manipular.
Exemplo de array e JSONB pro mesmo conjunto de dados:
-- Array
ARRAY['roupa', 'masculino', 'esporte']
-- JSONB
'["roupa", "masculino", "esporte"]'::JSONB
Se você precisa fazer coisas como ordenar, filtrar ou indexar com frequência, arrays são a melhor escolha.
Exemplo de uso de arrays em situações reais
Imagina a situação: você tá criando um app pra controle de presença na faculdade. Cada aula tem uma lista de estudantes que participaram, mas não precisa criar uma tabela separada pra ligar estudantes e aulas. Dá pra usar arrays:
-- Tabela de aulas com array de estudantes
CREATE TABLE lectures (
id SERIAL PRIMARY KEY,
topic TEXT NOT NULL,
students INTEGER[] -- Array de IDs dos estudantes
);
-- Exemplo de dados
INSERT INTO lectures (topic, students)
VALUES
('Bancos de dados', ARRAY[101, 102, 103]),
('Algoritmos', ARRAY[104, 105]);
Agora dá pra consultar fácil a lista de estudantes de qualquer aula, além de adicionar ou remover estudante do array.
Pontos importantes ao usar arrays no PostgreSQL
- O tipo de dado dentro do array tem que ser igual pra todo mundo. O PostgreSQL não deixa misturar, por exemplo, strings e números no mesmo array.
-- Funciona
ARRAY[1, 2, 3] -- Array de números
-- Erro: misturando string e número
ARRAY['maca', 42, 'cereja']
- A indexação dos elementos do array começa em 1, não em 0. Não esquece disso se você tá acostumado com linguagens onde começa do 0 (Python, JavaScript, C++ e tal).
- Suporte a NULL: arrays podem ter valores NULL
- Multidimensionalidade: o PostgreSQL suporta arrays multidimensionais
GO TO FULL VERSION