Formatador SQL/ MySQL · PostgreSQL
Embeleze ou comprima consultas SQL instantaneamente. Suporta MySQL, PostgreSQL e SQL generico.
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.