Formatador SQL/ MySQL · PostgreSQL

Embeleze ou comprima consultas SQL instantaneamente. Suporta MySQL, PostgreSQL e SQL generico.

Modo:
Dialeto:
Recuo:
Entrada SQL0 caracteres
Resultado formatado

Esta ferramenta resolveu o seu problema?

Exemplos de codigo

Python (sqlparse)

import sqlparse

sql = "select id,name from users where active=1"

# Format / beautify
formatted = sqlparse.format(
    sql,
    reindent=True,
    keyword_case='upper',
    identifier_case='lower',
    strip_comments=False,
    indent_width=2,
)
print(formatted)
# SELECT id, name
# FROM users
# WHERE active = 1

# Minify
minified = sqlparse.format(
    sql,
    strip_whitespace=True,
    keyword_case='upper',
)

Node.js (sql-formatter)

import { format } from 'sql-formatter';

const sql = `select id,name,email
from users where status='active'`;

// Format for MySQL
const formatted = format(sql, {
  language: 'mysql',
  tabWidth: 2,
  keywordCase: 'upper',
  linesBetweenQueries: 2,
});

// Format for PostgreSQL
const pgFormatted = format(sql, {
  language: 'postgresql',
  tabWidth: 2,
  keywordCase: 'upper',
});

console.log(formatted);
// SELECT
//   id,
//   name,
//   email
// FROM users
// WHERE status = 'active'

CLI (pgFormatter)

# Install pgFormatter (Perl)
# https://github.com/darold/pgFormatter
cpanm pgFormatter

# Format a file
pg_format query.sql -o formatted.sql

# Format from stdin
echo "select * from users" | pg_format

# Options
pg_format query.sql   --spaces 2   --keyword-case 1   --function-case 2

# Using prettier-plugin-sql (Node)
npx prettier --plugin prettier-plugin-sql   --parser sql query.sql

Go

package main

import (
    "fmt"
    "strings"
    "unicode"
)

// Simple SQL keyword uppercaser
func formatSQL(sql string) string {
    keywords := []string{
        "SELECT", "FROM", "WHERE",
        "JOIN", "LEFT JOIN", "INNER JOIN",
        "GROUP BY", "ORDER BY", "HAVING",
        "INSERT INTO", "VALUES", "UPDATE",
        "SET", "DELETE FROM", "LIMIT",
    }
    result := sql
    for _, kw := range keywords {
        lower := strings.ToLower(kw)
        result = strings.ReplaceAll(
            result, lower,
            "\n"+kw,
        )
    }
    return strings.TrimSpace(result)
}

// For production use, consider:
// github.com/xwb1989/sqlparser (MySQL)
// github.com/pganalyze/pg_query_go (PostgreSQL)
func main() {
    sql := "select id from users where id=1"
    fmt.Println(formatSQL(sql))
}

Perguntas frequentes

O que e formatacao / embelezamento de SQL?

A formatacao SQL (embelezamento) transforma uma consulta SQL compacta ou escrita de forma inconsistente em uma forma legivel e com indentacao consistente. Adiciona quebras de linha antes das clausulas principais (SELECT, FROM, WHERE, JOIN, etc.) e converte palavras-chave para maiusculas. Isso nao muda o que a consulta faz — apenas como ela aparece.

Suporta sintaxe MySQL e PostgreSQL?

O formatador lida com a sintaxe SQL comum compartilhada por MySQL, PostgreSQL e a maioria dos outros SGBDR. Recursos especificos de dialeto, como o operador de conversao :: do PostgreSQL ou os identificadores com crase do MySQL, sao tokenizados corretamente. Selecione seu dialeto para indicar quais convencoes de sintaxe voce esta usando.

Para que serve a minificacao de SQL?

A minificacao remove todos os espacos em branco e comentarios extras para produzir a forma mais compacta de uma consulta. Isso e util ao incorporar SQL em strings de codigo, enviar SQL em logs ou reduzir a verbosidade dos logs de consultas. Consultas minificadas sao funcionalmente identicas as suas versoes formatadas.

Como formato consultas SQL pela linha de comando?

Para PostgreSQL, use pg_format (Perl). Para MySQL, use o pacote Python mysqlformat. Voce tambem pode usar sqlparse em Python: import sqlparse; sqlparse.format(sql, reindent=True, keyword_case='upper'). Veja os exemplos de codigo abaixo.

Por que meus comentarios sao removidos apos a minificacao?

A minificacao remove intencionalmente os comentarios SQL (-- comentarios de linha unica e /* comentarios de bloco */) para reduzir o tamanho. Se voce precisa preservar comentarios, use o modo de formatacao, que mantem todos os comentarios e os reformata no nivel de indentacao correto.

O formatador consegue lidar com CTEs (clausulas WITH)?

Sim. Expressoes de tabela comuns WITH ... AS (...) sao reconhecidas. A palavra-chave WITH inicia um novo bloco. Instrucoes SELECT aninhadas dentro de CTEs tambem sao indentadas adequadamente.