SUPABASE_GETALL - Buscar Múltiplos Registros no Supabase
O que é este Node?
O SUPABASE_GETALL é o node responsável por buscar múltiplos registros de uma tabela Supabase com suporte a filtros, ordenação e paginação. Ele retorna uma lista de registros que atendem aos critérios especificados.
Por que este Node existe?
Em aplicações reais, raramente buscamos um único registro. Precisamos listar produtos, pedidos, usuários, etc. O SUPABASE_GETALL existe para:
- Listar registros: Buscar todos os registros de uma tabela ou um subconjunto filtrado
- Filtrar dados: Aplicar condições para retornar apenas registros relevantes (ex:
status = 'ativo') - Ordenar resultados: Controlar ordem dos registros (crescente/decrescente por campo)
- Paginar dados: Limitar quantidade de registros retornados para melhor performance
- Buscar sem ID: Encontrar registros usando outros campos como critério (email, CPF, categoria, etc.)
Como funciona internamente?
Quando o SUPABASE_GETALL é executado, o sistema:
- Valida configuração: Verifica se host e serviceRole do Supabase estão configurados
- Cria cliente: Inicializa conexão com Supabase usando credenciais fornecidas
- Monta query base: Cria SELECT * FROM tabela
- Aplica filtros: Se filters fornecido, adiciona condições WHERE (ex:
.eq('status', 'active')) - Aplica ordenação: Se sort fornecido, adiciona ORDER BY campo ASC/DESC
- Aplica limite: Se limit fornecido e returnAll = false, adiciona LIMIT
- Executa query: Busca registros do Supabase
- Retorna resultado: Objeto com array
rows(registros) ecount(quantidade) - Salva em variável: Armazena resultado na variável especificada
Código interno (supabase.executor.ts:90-124):
private async getAllRows(
supabase: SupabaseClient,
table: string,
filters: Record<string, any>,
options: any,
context: ExecutionContext,
): Promise<any> {
let query = supabase.from(table).select('*');
if (filters) {
const replacedFilters = this.replaceObjectVariables(filters, context.variables);
Object.entries(replacedFilters).forEach(([key, value]) => {
query = query.eq(key, value);
});
}
if (options.limit && !options.returnAll) {
query = query.limit(parseInt(options.limit));
}
if (options.sort) {
query = query.order(options.sort.field, { ascending: options.sort.ascending !== false });
}
const { data, error } = await query;
if (error) {
throw new Error(`Supabase getAll error: ${error.message}`);
}
return {
rows: data,
count: data.length,
};
}
Quando você DEVE usar este Node?
Use SUPABASE_GETALL sempre que precisar de buscar múltiplos registros ou buscar sem saber o ID:
Casos de uso
- Listar produtos de categoria: "Mostrar todos os produtos da categoria 'eletrônicos'"
- Buscar pedidos pendentes: "Listar todos os pedidos com status 'pendente'"
- Encontrar usuário por email: "Buscar usuário pelo email informado"
- Listar últimos registros: "Mostrar os 10 últimos clientes cadastrados"
- Dashboard de relatórios: "Buscar todas as vendas do mês atual"
Quando NÃO usar SUPABASE_GETALL
- Buscar por ID específico: Use SUPABASE_GETROW que é otimizado para busca por ID
- Filtros complexos com OR: Use queries SQL customizadas ou RPC functions do Supabase
- Agregações: Use RPC functions para COUNT, SUM, AVG, etc.
Parâmetros Detalhados
operation (string, obrigatório)
O que é: Tipo da operação Supabase a ser executada. Para este node, sempre deve ser "getAll".
Padrão: Nenhum (obrigatório)
Flow completo para testar:
{
"name": "Teste Supabase GetAll - Operation",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "supabase_1",
"type": "supabase",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Listar Produtos",
"operation": "getAll",
"config": {
"host": "https://seu-projeto.supabase.co",
"serviceRole": "sua-service-role-key"
},
"table": "products",
"responseVariable": "produtos"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Mostrar Quantidade",
"parameters": {
"message": "Encontrados {{produtos.count}} produtos"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "supabase_1" },
{ "source": "supabase_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Configure suas credenciais Supabase. O sistema deve retornar todos os produtos da tabela.
config (object, obrigatório)
O que é: Objeto contendo as credenciais de conexão com Supabase (host e serviceRole).
Padrão: Nenhum (obrigatório)
Flow completo para testar:
{
"name": "Teste Supabase GetAll - Config",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "supabase_1",
"type": "supabase",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Testar Conexão",
"operation": "getAll",
"config": {
"host": "https://xyzcompany.supabase.co",
"serviceRole": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
},
"table": "customers",
"responseVariable": "clientes"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Conectado! Total de clientes: {{clientes.count}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "supabase_1" },
{ "source": "supabase_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Use suas credenciais reais do Supabase. Se a configuração estiver correta, deve retornar a contagem de clientes.
table (string, obrigatório)
O que é: Nome da tabela no Supabase de onde buscar os registros.
Padrão: Nenhum (obrigatório)
Flow completo para testar:
{
"name": "Teste Supabase GetAll - Table",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "supabase_1",
"type": "supabase",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Listar Pedidos",
"operation": "getAll",
"config": {
"host": "https://seu-projeto.supabase.co",
"serviceRole": "sua-service-role-key"
},
"table": "orders",
"responseVariable": "pedidos"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Detalhes",
"parameters": {
"message": "Total de pedidos: {{pedidos.count}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "supabase_1" },
{ "source": "supabase_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Use uma tabela existente no seu banco Supabase. O sistema deve listar os registros.
filters (object, opcional)
O que é: Objeto com condições para filtrar registros. Cada chave é um campo da tabela e cada valor é o valor esperado.
Padrão: null (sem filtros, retorna todos os registros)
Flow completo para testar:
{
"name": "Teste Supabase GetAll - Filters",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "supabase_1",
"type": "supabase",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Buscar Produtos Ativos",
"operation": "getAll",
"config": {
"host": "https://seu-projeto.supabase.co",
"serviceRole": "sua-service-role-key"
},
"table": "products",
"filters": {
"status": "active",
"category": "electronics"
},
"responseVariable": "produtosAtivos"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Resultado",
"parameters": {
"message": "Encontrados {{produtosAtivos.count}} produtos ativos de eletrônicos"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "supabase_1" },
{ "source": "supabase_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: O sistema deve retornar apenas produtos com status='active' e category='electronics'.
limit (number, opcional)
O que é: Quantidade máxima de registros a retornar. Útil para paginação e performance.
Padrão: Sem limite (retorna todos os registros)
Flow completo para testar:
{
"name": "Teste Supabase GetAll - Limit",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "supabase_1",
"type": "supabase",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Top 5 Produtos",
"operation": "getAll",
"config": {
"host": "https://seu-projeto.supabase.co",
"serviceRole": "sua-service-role-key"
},
"table": "products",
"limit": 5,
"responseVariable": "top5"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Mostrar Quantidade",
"parameters": {
"message": "Retornados {{top5.count}} produtos (máximo 5)"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "supabase_1" },
{ "source": "supabase_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Mesmo se houver 100 produtos na tabela, deve retornar apenas 5.
returnAll (boolean, opcional)
O que é: Se true, ignora o limit e retorna todos os registros. Se false, respeita o limit.
Padrão: false
Flow completo para testar:
{
"name": "Teste Supabase GetAll - ReturnAll",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "supabase_1",
"type": "supabase",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Todos os Clientes",
"operation": "getAll",
"config": {
"host": "https://seu-projeto.supabase.co",
"serviceRole": "sua-service-role-key"
},
"table": "customers",
"limit": 10,
"returnAll": true,
"responseVariable": "todosClientes"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Total",
"parameters": {
"message": "Total de clientes: {{todosClientes.count}} (limit ignorado)"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "supabase_1" },
{ "source": "supabase_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Mesmo com limit=10, se returnAll=true, deve retornar todos os clientes.
sort (object, opcional)
O que é: Objeto para ordenar resultados. Contém field (campo para ordenar) e ascending (true=crescente, false=decrescente).
Padrão: Sem ordenação específica
Flow completo para testar:
{
"name": "Teste Supabase GetAll - Sort",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "supabase_1",
"type": "supabase",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Produtos por Preço",
"operation": "getAll",
"config": {
"host": "https://seu-projeto.supabase.co",
"serviceRole": "sua-service-role-key"
},
"table": "products",
"sort": {
"field": "price",
"ascending": false
},
"limit": 3,
"responseVariable": "produtosCaros"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Mostrar Top 3",
"parameters": {
"message": "Top 3 produtos mais caros:\n1. {{produtosCaros.rows[0].name}} - R$ {{produtosCaros.rows[0].price}}\n2. {{produtosCaros.rows[1].name}} - R$ {{produtosCaros.rows[1].price}}\n3. {{produtosCaros.rows[2].name}} - R$ {{produtosCaros.rows[2].price}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "supabase_1" },
{ "source": "supabase_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Deve retornar os 3 produtos com maior preço (ordem decrescente).
responseVariable (string, obrigatório)
O que é: Nome da variável onde os registros serão armazenados. Estrutura: {rows: [], count: number}.
Padrão: Nenhum (obrigatório)
Flow completo para testar:
{
"name": "Teste Supabase GetAll - ResponseVariable",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "supabase_1",
"type": "supabase",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Listar Pedidos",
"operation": "getAll",
"config": {
"host": "https://seu-projeto.supabase.co",
"serviceRole": "sua-service-role-key"
},
"table": "orders",
"filters": {
"status": "pending"
},
"responseVariable": "pedidosPendentes"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Total",
"parameters": {
"message": "Você tem {{pedidosPendentes.count}} pedidos pendentes"
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Primeiro Pedido",
"parameters": {
"message": "Próximo pedido: #{{pedidosPendentes.rows[0].order_number}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "supabase_1" },
{ "source": "supabase_1", "target": "message_1" },
{ "source": "message_1", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Teste: A variável pedidosPendentes deve estar acessível em múltiplos nodes com .count e .rows[index].
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| operation | string | Sim | Tipo de operação: "getAll" |
| config | object | Sim | Credenciais Supabase (host, serviceRole) |
| config.host | string | Sim | URL do projeto Supabase |
| config.serviceRole | string | Sim | Service Role Key do Supabase |
| table | string | Sim | Nome da tabela |
| filters | object | Não | Filtros para busca (campo: valor) |
| limit | number | Não | Limite de registros a retornar |
| returnAll | boolean | Não | Se true, ignora limit (padrão: false) |
| sort | object | Não | Ordenação: |
| responseVariable | string | Sim | Nome da variável para armazenar resultado |
Exemplo 1: Buscar Usuário por Email (Login)
Objetivo: Encontrar usuário pelo email para validar login.
JSON para Importar
{
"name": "Login com Supabase GetAll",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "message_1",
"type": "message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Boas-vindas",
"parameters": {
"message": "Bem-vindo ao sistema! Vamos fazer seu login."
}
}
},
{
"id": "email_1",
"type": "email",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Pedir Email",
"parameters": {
"message": "Por favor, digite seu email:",
"variableName": "userEmail"
}
}
},
{
"id": "supabase_1",
"type": "supabase",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Buscar Usuário",
"operation": "getAll",
"config": {
"host": "https://myapp.supabase.co",
"serviceRole": "your-service-role-key"
},
"table": "users",
"filters": {
"email": "{{userEmail}}"
},
"responseVariable": "foundUsers"
}
},
{
"id": "condition_1",
"type": "condition",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Usuário Existe?",
"parameters": {
"variable": "{{foundUsers.count}}",
"operator": "greater_than",
"value": "0"
}
}
},
{
"id": "message_yes",
"type": "message",
"position": { "x": 1100, "y": 50 },
"data": {
"label": "Login OK",
"parameters": {
"message": "Bem-vindo de volta, {{foundUsers.rows[0].name}}!"
}
}
},
{
"id": "message_no",
"type": "message",
"position": { "x": 1100, "y": 150 },
"data": {
"label": "Não Encontrado",
"parameters": {
"message": "Email não encontrado. Por favor, cadastre-se primeiro."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1300, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "email_1" },
{ "source": "email_1", "target": "supabase_1" },
{ "source": "supabase_1", "target": "condition_1" },
{ "source": "condition_1", "target": "message_yes", "label": "yes" },
{ "source": "condition_1", "target": "message_no", "label": "no" },
{ "source": "message_yes", "target": "end_1" },
{ "source": "message_no", "target": "end_1" }
]
}
Saída esperada (usuário existe):
Sistema: Bem-vindo ao sistema! Vamos fazer seu login.
Sistema: Por favor, digite seu email:
Usuário: joao@example.com
Sistema: Bem-vindo de volta, João Silva!
Saída esperada (usuário não existe):
Sistema: Bem-vindo ao sistema! Vamos fazer seu login.
Sistema: Por favor, digite seu email:
Usuário: novousuario@example.com
Sistema: Email não encontrado. Por favor, cadastre-se primeiro.
Exemplo 2: Listar Produtos por Categoria com Ordenação
Objetivo: Permitir que usuário consulte produtos de uma categoria ordenados por preço.
JSON para Importar
{
"name": "Catálogo de Produtos - Supabase GetAll",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "message_1",
"type": "message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Menu",
"parameters": {
"message": "Olá! Veja nossos produtos por categoria."
}
}
},
{
"id": "input_1",
"type": "input",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Escolher Categoria",
"parameters": {
"message": "Digite a categoria desejada (ex: livros, eletrônicos, roupas):",
"variableName": "categoria"
}
}
},
{
"id": "supabase_1",
"type": "supabase",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Buscar Produtos",
"operation": "getAll",
"config": {
"host": "https://loja.supabase.co",
"serviceRole": "service-role-key"
},
"table": "products",
"filters": {
"category": "{{categoria}}",
"available": true
},
"sort": {
"field": "price",
"ascending": true
},
"limit": 5,
"responseVariable": "produtosCategoria"
}
},
{
"id": "condition_1",
"type": "condition",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Tem Produtos?",
"parameters": {
"variable": "{{produtosCategoria.count}}",
"operator": "greater_than",
"value": "0"
}
}
},
{
"id": "message_produtos",
"type": "message",
"position": { "x": 1100, "y": 50 },
"data": {
"label": "Listar",
"parameters": {
"message": "Top 5 produtos de {{categoria}} (mais baratos):\n\n1. {{produtosCategoria.rows[0].name}} - R$ {{produtosCategoria.rows[0].price}}\n2. {{produtosCategoria.rows[1].name}} - R$ {{produtosCategoria.rows[1].price}}\n3. {{produtosCategoria.rows[2].name}} - R$ {{produtosCategoria.rows[2].price}}"
}
}
},
{
"id": "message_vazio",
"type": "message",
"position": { "x": 1100, "y": 150 },
"data": {
"label": "Sem Produtos",
"parameters": {
"message": "Desculpe, não temos produtos disponíveis nesta categoria."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1300, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "input_1" },
{ "source": "input_1", "target": "supabase_1" },
{ "source": "supabase_1", "target": "condition_1" },
{ "source": "condition_1", "target": "message_produtos", "label": "yes" },
{ "source": "condition_1", "target": "message_vazio", "label": "no" },
{ "source": "message_produtos", "target": "end_1" },
{ "source": "message_vazio", "target": "end_1" }
]
}
Saída esperada:
Sistema: Olá! Veja nossos produtos por categoria.
Sistema: Digite a categoria desejada (ex: livros, eletrônicos, roupas):
Usuário: eletrônicos
Sistema: Top 5 produtos de eletrônicos (mais baratos):
1. Mouse USB - R$ 25.90
2. Teclado Gamer - R$ 89.90
3. Webcam HD - R$ 159.90
Exemplo 3: Dashboard de Pedidos Pendentes
Objetivo: Mostrar lista de pedidos pendentes ordenados por data para equipe de atendimento.
JSON para Importar
{
"name": "Dashboard Pedidos Pendentes - Supabase GetAll",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "message_1",
"type": "message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Header",
"parameters": {
"message": "Dashboard de Atendimento - Pedidos Pendentes"
}
}
},
{
"id": "supabase_1",
"type": "supabase",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Buscar Pendentes",
"operation": "getAll",
"config": {
"host": "https://empresa.supabase.co",
"serviceRole": "service-role-key"
},
"table": "orders",
"filters": {
"status": "pending"
},
"sort": {
"field": "created_at",
"ascending": true
},
"limit": 10,
"responseVariable": "pedidosPendentes"
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Resumo",
"parameters": {
"message": "Total de pedidos pendentes: {{pedidosPendentes.count}}\n\nPróximos 10 pedidos (mais antigos):"
}
}
},
{
"id": "message_3",
"type": "message",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Lista",
"parameters": {
"message": "1. Pedido #{{pedidosPendentes.rows[0].order_number}} - Cliente: {{pedidosPendentes.rows[0].customer_name}} - R$ {{pedidosPendentes.rows[0].total}}\n\n2. Pedido #{{pedidosPendentes.rows[1].order_number}} - Cliente: {{pedidosPendentes.rows[1].customer_name}} - R$ {{pedidosPendentes.rows[1].total}}\n\n3. Pedido #{{pedidosPendentes.rows[2].order_number}} - Cliente: {{pedidosPendentes.rows[2].customer_name}} - R$ {{pedidosPendentes.rows[2].total}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1100, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "supabase_1" },
{ "source": "supabase_1", "target": "message_2" },
{ "source": "message_2", "target": "message_3" },
{ "source": "message_3", "target": "end_1" }
]
}
Saída esperada:
Sistema: Dashboard de Atendimento - Pedidos Pendentes
Sistema: Total de pedidos pendentes: 23
Próximos 10 pedidos (mais antigos):
Sistema: 1. Pedido #ORD-001 - Cliente: Maria Santos - R$ 259.90
2. Pedido #ORD-003 - Cliente: João Silva - R$ 89.50
3. Pedido #ORD-005 - Cliente: Ana Costa - R$ 1.250.00
Resposta do Node
{
"rows": [
{
"id": "uuid-1",
"name": "Produto 1",
"price": 99.90,
"category": "electronics",
"available": true,
"created_at": "2025-01-10T10:00:00.000Z"
},
{
"id": "uuid-2",
"name": "Produto 2",
"price": 149.90,
"category": "electronics",
"available": true,
"created_at": "2025-01-11T14:30:00.000Z"
}
],
"count": 2
}
Boas Práticas
✅ SIM:
- Use filters para reduzir quantidade de dados retornados
- Use limit para melhorar performance em tabelas grandes
- Use sort para ordenar resultados de forma consistente
- Combine múltiplos filtros para buscas mais específicas
- Verifique
countantes de acessarrows[0]para evitar erros - Use variáveis dinâmicas nos filtros (
{{categoria}})
❌ NÃO:
- Não busque todos os registros sem necessidade (use limit)
- Não assuma que rows[0] existe sem verificar count
- Não use getAll quando souber o ID (use getRow)
- Não faça filtros complexos com getAll (use RPC functions)
- Não exponha Service Role Key em código front-end
Dicas
💡 Dica 1: A estrutura do resultado sempre tem rows (array) e count (número). Acesse registros com {{variavel.rows[0].campo}}.
💡 Dica 2: Filtros atualmente suportam apenas operador = (igualdade). Para filtros mais complexos (>, <, LIKE, IN), use RPC functions do Supabase.
💡 Dica 3: Use returnAll: false e limit para implementar paginação. Para próxima página, use offset (adicione parâmetro customizado no futuro).
💡 Dica 4: Ordene por campos com índice no banco para melhor performance. Campos como created_at, id, price geralmente têm índices.
💡 Dica 5: Para buscar por múltiplos valores do mesmo campo (ex: categorias), faça múltiplas chamadas getAll ou use RPC function.
Próximos Nodes
→ SUPABASE_GETROW - Buscar registro específico por ID → SUPABASE_INSERT - Inserir novo registro na tabela → SUPABASE_UPDATE - Atualizar registros existentes → SUPABASE_DELETE - Deletar registros da tabela