SUPABASE_DELETE - Deletar Registro no Supabase
O que é este Node?
O SUPABASE_DELETE é o node responsável por deletar um registro específico de uma tabela Supabase usando o ID do registro. Ele remove permanentemente o registro do banco de dados.
Por que este Node existe?
Remover dados é uma operação crítica em aplicações. O SUPABASE_DELETE existe para:
- Remover registros obsoletos: Deletar dados que não são mais necessários
- Cancelar operações: Remover pedidos cancelados, agendamentos não confirmados, etc.
- LGPD/GDPR compliance: Permitir que usuários excluam seus dados pessoais
- Limpar dados temporários: Remover logs antigos, sessões expiradas, cache
- Desfazer operações: Permitir que usuários cancelem ações recém-criadas
Como funciona internamente?
Quando o SUPABASE_DELETE é 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
- Substitui variáveis: Processa rowId substituindo variáveis do contexto (ex:
{{registroId}}) - Executa DELETE: Remove registro da tabela WHERE id = rowId
- Se não encontrado: Retorna erro indicando que registro não existe
- Se sucesso: Retorna confirmação com ID do registro deletado
- Salva em variável: Armazena resultado da operação na variável especificada
Código interno (supabase.executor.ts:171-189):
private async deleteRow(
supabase: SupabaseClient,
table: string,
rowId: string,
context: ExecutionContext,
): Promise<any> {
const replacedId = this.replaceVariables(rowId, context.variables);
const { error } = await supabase
.from(table)
.delete()
.eq('id', replacedId);
if (error) {
throw new Error(`Supabase delete error: ${error.message}`);
}
return { deleted: true, rowId: replacedId };
}
Quando você DEVE usar este Node?
Use SUPABASE_DELETE sempre que precisar de remover permanentemente um registro:
Casos de uso
- Cancelar pedido: "Remover pedido não pago após timeout"
- Excluir conta: "Deletar todos os dados do usuário que solicitou exclusão"
- Limpar logs antigos: "Remover logs com mais de 30 dias"
- Remover agendamento: "Deletar compromisso cancelado pelo cliente"
- Desfazer cadastro duplicado: "Remover registro criado por engano"
Quando NÃO usar SUPABASE_DELETE
- Arquivar dados: Use SUPABASE_UPDATE para mudar status para 'archived' ao invés de deletar
- Soft delete: Use UPDATE para marcar como deletado (deleted_at, active=false) mantendo histórico
- Dados com dependências: Verifique relações antes de deletar para evitar órfãos
- Dados auditáveis: Mantenha histórico usando soft delete ao invés de hard delete
Parâmetros Detalhados
operation (string, obrigatório)
O que é: Tipo da operação Supabase a ser executada. Para este node, sempre deve ser "delete".
Padrão: Nenhum (obrigatório)
Flow completo para testar:
{
"name": "Teste Supabase Delete - 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": "Deletar Registro",
"operation": "delete",
"config": {
"host": "https://seu-projeto.supabase.co",
"serviceRole": "sua-service-role-key"
},
"table": "temp_data",
"rowId": "uuid-temp-123",
"responseVariable": "resultado"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Registro deletado: {{resultado.rowId}}"
}
}
},
{
"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 e um ID de teste. O sistema deve deletar o registro.
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 Delete - 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 Delete",
"operation": "delete",
"config": {
"host": "https://xyzcompany.supabase.co",
"serviceRole": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
},
"table": "test_logs",
"rowId": "log-test-456",
"responseVariable": "deletado"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Sucesso",
"parameters": {
"message": "Log removido com sucesso"
}
}
},
{
"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 deletar o log.
table (string, obrigatório)
O que é: Nome da tabela no Supabase de onde deletar o registro.
Padrão: Nenhum (obrigatório)
Flow completo para testar:
{
"name": "Teste Supabase Delete - 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": "Remover Pedido",
"operation": "delete",
"config": {
"host": "https://seu-projeto.supabase.co",
"serviceRole": "sua-service-role-key"
},
"table": "cancelled_orders",
"rowId": "order-789",
"responseVariable": "pedidoRemovido"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Pedido cancelado removido do sistema"
}
}
},
{
"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 deletar o registro.
rowId (string, obrigatório)
O que é: ID do registro que você deseja deletar. Aceita variáveis (ex: {{pedidoId}}).
Padrão: Nenhum (obrigatório)
Flow completo para testar:
{
"name": "Teste Supabase Delete - RowId Dinâmico",
"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": "Aviso",
"parameters": {
"message": "ATENÇÃO: Esta ação irá deletar permanentemente o registro."
}
}
},
{
"id": "input_1",
"type": "input",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Pedir ID",
"parameters": {
"message": "Digite o ID do registro a ser deletado:",
"variableName": "registroId"
}
}
},
{
"id": "input_2",
"type": "input",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Digite 'CONFIRMAR' para prosseguir:",
"variableName": "confirmacao"
}
}
},
{
"id": "condition_1",
"type": "condition",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Verificar Confirmação",
"parameters": {
"variable": "{{confirmacao}}",
"operator": "equals",
"value": "CONFIRMAR"
}
}
},
{
"id": "supabase_1",
"type": "supabase",
"position": { "x": 1100, "y": 50 },
"data": {
"label": "Deletar",
"operation": "delete",
"config": {
"host": "https://seu-projeto.supabase.co",
"serviceRole": "sua-service-role-key"
},
"table": "user_data",
"rowId": "{{registroId}}",
"responseVariable": "resultado"
}
},
{
"id": "message_ok",
"type": "message",
"position": { "x": 1300, "y": 50 },
"data": {
"label": "Sucesso",
"parameters": {
"message": "Registro {{resultado.rowId}} deletado com sucesso."
}
}
},
{
"id": "message_cancel",
"type": "message",
"position": { "x": 1100, "y": 150 },
"data": {
"label": "Cancelado",
"parameters": {
"message": "Operação cancelada. Nenhum registro foi deletado."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1500, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "input_1" },
{ "source": "input_1", "target": "input_2" },
{ "source": "input_2", "target": "condition_1" },
{ "source": "condition_1", "target": "supabase_1", "label": "yes" },
{ "source": "condition_1", "target": "message_cancel", "label": "no" },
{ "source": "supabase_1", "target": "message_ok" },
{ "source": "message_ok", "target": "end_1" },
{ "source": "message_cancel", "target": "end_1" }
]
}
Teste: Digite um ID válido e confirme com "CONFIRMAR". O sistema deve deletar o registro.
responseVariable (string, obrigatório)
O que é: Nome da variável onde o resultado da operação será armazenado (objeto com deleted e rowId).
Padrão: Nenhum (obrigatório)
Flow completo para testar:
{
"name": "Teste Supabase Delete - 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": "Remover Sessão",
"operation": "delete",
"config": {
"host": "https://seu-projeto.supabase.co",
"serviceRole": "sua-service-role-key"
},
"table": "sessions",
"rowId": "session-expired-123",
"responseVariable": "sessaoRemovida"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Status",
"parameters": {
"message": "Sessão removida: {{sessaoRemovida.deleted}}"
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "ID",
"parameters": {
"message": "ID da sessão: {{sessaoRemovida.rowId}}"
}
}
},
{
"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: O resultado deve estar acessível em múltiplos nodes com .deleted e .rowId.
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| operation | string | Sim | Tipo de operação: "delete" |
| 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 |
| rowId | string | Sim | ID do registro a deletar |
| responseVariable | string | Sim | Nome da variável para armazenar resultado |
Exemplo 1: Cancelar Agendamento
Objetivo: Permitir que cliente cancele agendamento e remova do banco de dados.
JSON para Importar
{
"name": "Cancelar Agendamento - Supabase Delete",
"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": "Cancelamento de Agendamento"
}
}
},
{
"id": "input_1",
"type": "input",
"position": { "x": 500, "y": 100 },
"data": {
"label": "ID Agendamento",
"parameters": {
"message": "Digite o número do seu agendamento:",
"variableName": "agendamentoId"
}
}
},
{
"id": "supabase_get",
"type": "supabase",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Buscar Agendamento",
"operation": "getRow",
"config": {
"host": "https://clinica.supabase.co",
"serviceRole": "service-role-key"
},
"table": "appointments",
"rowId": "{{agendamentoId}}",
"responseVariable": "agendamento"
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Detalhes",
"parameters": {
"message": "Agendamento encontrado:\n\nData: {{agendamento.date}}\nHorário: {{agendamento.time}}\nProfissional: {{agendamento.doctor_name}}\n\nDeseja realmente cancelar?"
}
}
},
{
"id": "input_2",
"type": "input",
"position": { "x": 1100, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Digite 'SIM' para confirmar o cancelamento:",
"variableName": "confirmacao"
}
}
},
{
"id": "condition_1",
"type": "condition",
"position": { "x": 1300, "y": 100 },
"data": {
"label": "Confirmar?",
"parameters": {
"variable": "{{confirmacao}}",
"operator": "equals",
"value": "SIM"
}
}
},
{
"id": "supabase_delete",
"type": "supabase",
"position": { "x": 1500, "y": 50 },
"data": {
"label": "Cancelar Agendamento",
"operation": "delete",
"config": {
"host": "https://clinica.supabase.co",
"serviceRole": "service-role-key"
},
"table": "appointments",
"rowId": "{{agendamentoId}}",
"responseVariable": "cancelado"
}
},
{
"id": "message_ok",
"type": "message",
"position": { "x": 1700, "y": 50 },
"data": {
"label": "Sucesso",
"parameters": {
"message": "Agendamento cancelado com sucesso!\n\nSeu horário foi liberado.\nCaso precise, faça um novo agendamento."
}
}
},
{
"id": "message_cancel",
"type": "message",
"position": { "x": 1500, "y": 150 },
"data": {
"label": "Mantido",
"parameters": {
"message": "Agendamento mantido. Seu horário continua reservado."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "input_1" },
{ "source": "input_1", "target": "supabase_get" },
{ "source": "supabase_get", "target": "message_2" },
{ "source": "message_2", "target": "input_2" },
{ "source": "input_2", "target": "condition_1" },
{ "source": "condition_1", "target": "supabase_delete", "label": "yes" },
{ "source": "condition_1", "target": "message_cancel", "label": "no" },
{ "source": "supabase_delete", "target": "message_ok" },
{ "source": "message_ok", "target": "end_1" },
{ "source": "message_cancel", "target": "end_1" }
]
}
Saída esperada:
Sistema: Cancelamento de Agendamento
Sistema: Digite o número do seu agendamento:
Usuário: APT-12345
Sistema: Agendamento encontrado:
Data: 2025-01-20
Horário: 14:30
Profissional: Dr. João Silva
Deseja realmente cancelar?
Sistema: Digite 'SIM' para confirmar o cancelamento:
Usuário: SIM
Sistema: Agendamento cancelado com sucesso!
Seu horário foi liberado.
Caso precise, faça um novo agendamento.
Exemplo 2: Excluir Conta (LGPD)
Objetivo: Permitir que usuário exclua sua conta e todos os dados pessoais conforme LGPD.
JSON para Importar
{
"name": "Excluir Conta LGPD - Supabase Delete",
"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": "Aviso Importante",
"parameters": {
"message": "⚠️ ATENÇÃO: Exclusão de Conta\n\nVocê está prestes a excluir sua conta.\n\nIsso irá:\n• Remover todos os seus dados pessoais\n• Cancelar todos os agendamentos futuros\n• Apagar seu histórico\n\n❌ Esta ação é IRREVERSÍVEL"
}
}
},
{
"id": "email_1",
"type": "email",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Verificar Email",
"parameters": {
"message": "Para confirmar, digite seu email cadastrado:",
"variableName": "emailConfirmacao"
}
}
},
{
"id": "supabase_get",
"type": "supabase",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Buscar Usuário",
"operation": "getAll",
"config": {
"host": "https://app.supabase.co",
"serviceRole": "service-role-key"
},
"table": "users",
"filters": {
"email": "{{emailConfirmacao}}"
},
"responseVariable": "usuarios"
}
},
{
"id": "condition_1",
"type": "condition",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Usuário Existe?",
"parameters": {
"variable": "{{usuarios.count}}",
"operator": "greater_than",
"value": "0"
}
}
},
{
"id": "input_1",
"type": "input",
"position": { "x": 1100, "y": 50 },
"data": {
"label": "Confirmação Final",
"parameters": {
"message": "Digite 'EXCLUIR MINHA CONTA' para confirmar:",
"variableName": "confirmacao"
}
}
},
{
"id": "condition_2",
"type": "condition",
"position": { "x": 1300, "y": 50 },
"data": {
"label": "Confirmar Exclusão?",
"parameters": {
"variable": "{{confirmacao}}",
"operator": "equals",
"value": "EXCLUIR MINHA CONTA"
}
}
},
{
"id": "supabase_delete",
"type": "supabase",
"position": { "x": 1500, "y": 25 },
"data": {
"label": "Excluir Conta",
"operation": "delete",
"config": {
"host": "https://app.supabase.co",
"serviceRole": "service-role-key"
},
"table": "users",
"rowId": "{{usuarios.rows[0].id}}",
"responseVariable": "contaExcluida"
}
},
{
"id": "message_deleted",
"type": "message",
"position": { "x": 1700, "y": 25 },
"data": {
"label": "Conta Excluída",
"parameters": {
"message": "Sua conta foi excluída com sucesso.\n\nTodos os seus dados foram removidos conforme LGPD.\n\nSentiremos sua falta. Até breve!"
}
}
},
{
"id": "message_wrong",
"type": "message",
"position": { "x": 1500, "y": 75 },
"data": {
"label": "Texto Incorreto",
"parameters": {
"message": "Texto de confirmação incorreto. Exclusão cancelada."
}
}
},
{
"id": "message_notfound",
"type": "message",
"position": { "x": 1100, "y": 150 },
"data": {
"label": "Email Não Encontrado",
"parameters": {
"message": "Email não encontrado em nossa base. Verifique e tente novamente."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "email_1" },
{ "source": "email_1", "target": "supabase_get" },
{ "source": "supabase_get", "target": "condition_1" },
{ "source": "condition_1", "target": "input_1", "label": "yes" },
{ "source": "condition_1", "target": "message_notfound", "label": "no" },
{ "source": "input_1", "target": "condition_2" },
{ "source": "condition_2", "target": "supabase_delete", "label": "yes" },
{ "source": "condition_2", "target": "message_wrong", "label": "no" },
{ "source": "supabase_delete", "target": "message_deleted" },
{ "source": "message_deleted", "target": "end_1" },
{ "source": "message_wrong", "target": "end_1" },
{ "source": "message_notfound", "target": "end_1" }
]
}
Saída esperada (sucesso):
Sistema: ⚠️ ATENÇÃO: Exclusão de Conta
Você está prestes a excluir sua conta.
Isso irá:
• Remover todos os seus dados pessoais
• Cancelar todos os agendamentos futuros
• Apagar seu histórico
❌ Esta ação é IRREVERSÍVEL
Sistema: Para confirmar, digite seu email cadastrado:
Usuário: usuario@example.com
Sistema: Digite 'EXCLUIR MINHA CONTA' para confirmar:
Usuário: EXCLUIR MINHA CONTA
Sistema: Sua conta foi excluída com sucesso.
Todos os seus dados foram removidos conforme LGPD.
Sentiremos sua falta. Até breve!
Exemplo 3: Limpar Logs Antigos
Objetivo: Criar rotina automatizada para deletar logs com mais de 30 dias.
JSON para Importar
{
"name": "Limpar Logs Antigos - Supabase Delete",
"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": "Início Limpeza",
"parameters": {
"message": "Iniciando limpeza de logs antigos..."
}
}
},
{
"id": "calculator_1",
"type": "calculator",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Data Limite",
"parameters": {
"expression": "{{_timestamp}} - (30 * 24 * 60 * 60 * 1000)",
"variableName": "dataLimite"
}
}
},
{
"id": "supabase_get",
"type": "supabase",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Buscar Logs Antigos",
"operation": "getAll",
"config": {
"host": "https://sistema.supabase.co",
"serviceRole": "service-role-key"
},
"table": "system_logs",
"filters": {
"created_at_lt": "{{dataLimite}}"
},
"limit": 100,
"responseVariable": "logsAntigos"
}
},
{
"id": "loop_1",
"type": "loop",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Para Cada Log",
"parameters": {
"array": "{{logsAntigos.rows}}",
"itemVariable": "log"
}
}
},
{
"id": "supabase_delete",
"type": "supabase",
"position": { "x": 1100, "y": 100 },
"data": {
"label": "Deletar Log",
"operation": "delete",
"config": {
"host": "https://sistema.supabase.co",
"serviceRole": "service-role-key"
},
"table": "system_logs",
"rowId": "{{log.id}}",
"responseVariable": "logDeletado"
}
},
{
"id": "delay_1",
"type": "delay",
"position": { "x": 1300, "y": 100 },
"data": {
"label": "Aguardar",
"parameters": {
"duration": 100
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 1500, "y": 100 },
"data": {
"label": "Relatório",
"parameters": {
"message": "Limpeza concluída!\n\nLogs removidos: {{logsAntigos.count}}\nData limite: {{dataLimite}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "calculator_1" },
{ "source": "calculator_1", "target": "supabase_get" },
{ "source": "supabase_get", "target": "loop_1" },
{ "source": "loop_1", "target": "supabase_delete" },
{ "source": "supabase_delete", "target": "delay_1" },
{ "source": "delay_1", "target": "loop_1" },
{ "source": "loop_1", "target": "message_2", "label": "done" },
{ "source": "message_2", "target": "end_1" }
]
}
Saída esperada:
Sistema: Iniciando limpeza de logs antigos...
Sistema: Limpeza concluída!
Logs removidos: 47
Data limite: 2024-12-15T10:00:00.000Z
Resposta do Node
{
"deleted": true,
"rowId": "uuid-do-registro-deletado"
}
Boas Práticas
✅ SIM:
- Sempre confirme antes de deletar (use CONDITION)
- Busque e mostre dados antes de deletar para usuário revisar
- Use soft delete (UPDATE com deleted_at) ao invés de hard delete quando possível
- Implemente dupla confirmação para operações críticas
- Registre logs de exclusão para auditoria
- Verifique dependências antes de deletar
❌ NÃO:
- Não delete sem confirmação do usuário
- Não delete registros com relacionamentos sem verificar
- Não use delete para "arquivar" dados (use UPDATE)
- Não exponha Service Role Key em código front-end
- Não delete em massa sem verificar impacto
- Não assuma que delete sempre funciona (trate erros)
Dicas
💡 Dica 1: Prefira soft delete (UPDATE com deleted_at ou active=false) ao invés de hard delete. Permite recuperar dados se necessário.
💡 Dica 2: DELETE é irreversível! Sempre implemente confirmação dupla para operações críticas de exclusão.
💡 Dica 3: Configure cascading delete no banco para lidar com relacionamentos. Ou delete manualmente registros dependentes primeiro.
💡 Dica 4: Para LGPD/GDPR, além de deletar da tabela principal, delete de todas as tabelas relacionadas (logs, histórico, etc.).
💡 Dica 5: Se delete falhar (registro não existe ou constraint violation), o erro será retornado. Use CONDITION para verificar sucesso.
Próximos Nodes
→ SUPABASE_GETROW - Buscar registro específico por ID → SUPABASE_GETALL - Buscar múltiplos registros com filtros → SUPABASE_INSERT - Inserir novo registro na tabela → SUPABASE_UPDATE - Atualizar registro existente