Hoje vamos trocar uma ideia sobre arrays — uma das ferramentas mais maneiras do PostgreSQL, que deixa você guardar uma lista de valores do mesmo tipo dentro de uma coluna só. A gente vai ver arrays com mais detalhes nos próximos níveis.
Quando falam "arrays", logo vem à cabeça listas. Pensa em como você faz uma lista de compras antes de ir no mercado: maçã, banana, leite, pão. No PostgreSQL, um array é tipo essa lista, onde dá pra guardar vários valores num campo só, e cada valor é do mesmo tipo de dado. Tipo, array de números, array de textos, array de datas e por aí vai.
Vamos ver uns exemplos.
Array de números:
{1, 2, 3, 4}
Array de strings:
{"apple", "banana", "cherry"}
Array de datas:
{2024-10-01, 2024-10-02, 2024-10-03}
O array deixa você guardar vários valores num campo só, economizando espaço na tabela e deixando as queries mais flexíveis.
Pra que servem arrays? Principais vantagens
Armazenamento compacto: guardar vários valores num campo só. Isso é muito útil pra dados que têm relação entre si. Tipo, lista de tags de um artigo ou lista de notas de um estudante. Precisa mesmo criar uma tabela só pra dois tags?
Facilidade na consulta: arrays deixam você pegar logo a lista toda de valores de um campo, e também mexer fácil nos elementos do array.
Performance: em alguns casos, arrays evitam que você tenha que criar tabelas extras pra dados relacionados, o que pode simplificar a arquitetura do banco e acelerar o desenvolvimento. Quem não curte isso, né?
Como trabalhar com arrays no PostgreSQL?
Criando um array no SELECT
Pra criar um array, dá pra usar o construtor ARRAY[]. Olha só:
-- Exemplo de array de números
SELECT ARRAY[1, 2, 3, 4];
-- Exemplo de array de strings
SELECT ARRAY['apple', 'banana', 'cherry'];
Muito fácil, né? Agora bora criar uma tabela e tentar selecionar alguma coisa nela.
Criando uma tabela com arrays
Pra começar, vamos criar uma tabela onde uma das colunas vai ser um array.
| id | name - VARCHAR(50) | subjects - TEXT[] |
|---|---|---|
| 1 | Alex | {Matemática,Física} |
| 2 | Maria | {Química,Biologia,Inglês} |
| 3 | Peter | {Informática} |
Bora ver como ficou:
SELECT * FROM students;
| id | name | subjects |
|---|---|---|
| 1 | Alex | {Matemática,Física} |
| 2 | Maria | {Química,Biologia,Inglês} |
| 3 | Peter | {Informática} |
Extraindo dados de arrays
Pra pegar dados de um array, o PostgreSQL tem várias funções e operadores.
Pegar um elemento do array
Pra pegar um elemento do array pelo índice, usa colchetes []. Só fica ligado que a contagem começa do 1 (e não do 0, igual na maioria das linguagens de programação).
-- Pegar a primeira matéria de cada estudante
SELECT name, subjects[1] AS primeira_materia FROM students;
E o resultado é esse aqui:
| name | primeira_materia |
|---|---|
| Alex | Matemática |
| Maria | Química |
| Peter | Informática |
Pegar o array inteiro
Pra pegar todos os elementos do array, é só fazer um SELECT normal:
SELECT name, subjects FROM students;
Procurar valores dentro do array
Às vezes a gente precisa saber se o array tem um valor específico. Pra isso, usa o operador ANY.
-- Selecionar estudantes que estudam "Matemática"
SELECT name
FROM students
WHERE 'Matemática' = ANY(subjects);
O resultado da query:
| name |
|---|
| Alex |
No PostgreSQL tem um monte de funções e operadores pra mexer com arrays, mas isso você vai ver nos próximos níveis :P
Erros comuns ao trabalhar com arrays
Misturar indexação começando do 0 e do 1.
No PostgreSQL, o índice do array começa do 1. Se você tá acostumado com linguagens tipo Python ou JavaScript, isso pode confundir fácil.
Arrays vazios.
Array vazio {} e NULL são coisas diferentes no PostgreSQL. Se for comparar arrays, não confunde esses dois, beleza?
Trabalhar com arrays muito grandes.
Guardar um monte de dado num array pode deixar as queries mais lentas. Usa arrays pra volumes pequenos de dados.
GO TO FULL VERSION