Criar uma Tabela e Indexar Campos JSONB
Nesta etapa, você criará uma tabela para armazenar informações de produtos utilizando o tipo de dado JSONB e, em seguida, criará um índice GIN para otimizar as consultas nesses dados. JSONB armazena dados JSON em um formato binário decomposto, que é ligeiramente mais lento para entrada, mas muito mais rápido para processar. Um GIN (Generalized Inverted Index) é ideal para indexar valores compostos como os de uma coluna JSONB.
Primeiro, abra um terminal e conecte-se ao banco de dados PostgreSQL usando o shell interativo psql:
sudo -u postgres psql
Agora você verá o prompt do PostgreSQL, que se parece com postgres=#.
Em seguida, crie uma tabela chamada products com uma coluna id e uma coluna data do tipo JSONB.
CREATE TABLE products (
id SERIAL PRIMARY KEY,
data JSONB
);
Agora, insira alguns dados de exemplo de produtos na tabela products.
INSERT INTO products (data) VALUES
('{"name": "Laptop", "price": 1200, "tags": ["electronics", "computer"]}'),
('{"name": "Keyboard", "price": 75, "tags": ["electronics", "accessory"]}'),
('{"name": "Mouse", "price": 30, "tags": ["electronics", "accessory"]}'),
('{"name": "Monitor", "price": 300, "tags": ["electronics", "display"]}');
Para acelerar significativamente as buscas na coluna data, crie um índice GIN nela.
CREATE INDEX idx_products_data ON products USING GIN (data);
Você pode verificar se o índice foi criado com sucesso usando o comando \di, que lista todos os índices.
\di
Você deverá ver idx_products_data na lista de relações, semelhante à saída abaixo:
List of relations
Schema | Name | Type | Owner | Table | Size | Description
--------+---------------------+-------+----------+-----------+------------+-------------
public | idx_products_data | index | postgres | products | 16 kB |
public | products_pkey | index | postgres | products | 16 kB |
(2 rows)
Você configurou com sucesso sua tabela e indexou a coluna JSONB. Você permanecerá no shell psql para a próxima etapa.