Formateador SQL/ MySQL · PostgreSQL

Embellece o comprime consultas SQL al instante. Compatible con MySQL, PostgreSQL y SQL generico.

Modo:
Dialecto:
Sangría:
Entrada SQL0 caracteres
Resultado formateado

¿Esta herramienta resolvió tu problema?

Ejemplos 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))
}

Preguntas frecuentes

Que es el formateo / embellecimiento de SQL?

El formateo SQL (embellecimiento) transforma una consulta SQL compacta o escrita de forma inconsistente en una forma legible con indentacion consistente. Agrega saltos de linea antes de las clausulas principales (SELECT, FROM, WHERE, JOIN, etc.) y convierte las palabras clave a mayusculas. Esto no cambia lo que hace la consulta, solo como se ve.

Es compatible con la sintaxis de MySQL y PostgreSQL?

El formateador maneja la sintaxis SQL comun compartida por MySQL, PostgreSQL y la mayoria de los otros RDBMS. Las caracteristicas especificas del dialecto, como el operador de conversion :: de PostgreSQL o los identificadores con backtick de MySQL, se tokenizan correctamente. Selecciona tu dialecto para indicar que convenciones de sintaxis estas utilizando.

Para que se usa la minificacion de SQL?

La minificacion elimina todos los espacios en blanco y comentarios adicionales para producir la forma mas compacta de una consulta. Es util al incrustar SQL en cadenas de codigo, enviar SQL en registros o reducir la verbosidad de los registros de consultas. Las consultas minificadas son funcionalmente identicas a sus versiones formateadas.

Como formateo consultas SQL desde la linea de comandos?

Para PostgreSQL, usa pg_format (Perl). Para MySQL, usa el paquete de Python mysqlformat. Tambien puedes usar sqlparse en Python: import sqlparse; sqlparse.format(sql, reindent=True, keyword_case='upper'). Consulta los ejemplos de codigo a continuacion.

Por que se eliminan mis comentarios despues de la minificacion?

La minificacion elimina intencionalmente los comentarios SQL (-- comentarios de una linea y /* comentarios de bloque */) para reducir el tamano. Si necesitas conservar los comentarios, usa el modo de formato en su lugar, que mantiene todos los comentarios y los reformatea en el nivel de indentacion correcto.

Puede el formateador manejar CTEs (clausulas WITH)?

Si. Las expresiones de tabla comunes WITH ... AS (...) son reconocidas. La palabra clave WITH inicia un nuevo bloque. Las sentencias SELECT anidadas dentro de los CTEs tambien se indentan adecuadamente.