Перейти к содержанию

PICO_SQL_PRETTY

Скалярная функция PICO_SQL_PRETTY форматирует текст SQL-запроса так же, как EXPLAIN (RAW, FMT) показывает запросы плана.

Функция является строгой.

Синтаксис

PICO_SQL_PRETTY ( string )

Правила

  • Запрос короче 80 символов выводится в одну строку. Функция заменяет лишние пробелы и переводы строк одним пробелом и ставит пробелы вокруг операторов и после запятых.
  • В запросе длиной 80 символов и больше каждое предложение (SELECT, FROM, WHERE, GROUP BY, ORDER BY и так далее) начинается с новой строки. Элементы предложения выводятся на отдельных строках с отступом в два пробела.
  • Регистр ключевых слов и имен не изменяется.
  • Функция не проверяет синтаксис запроса. Параметры $1 и ? остаются в тексте.
  • Если форматирование изменяет лексемы запроса, функция возвращает текст без изменений. Например, однострочный комментарий -- в середине короткого запроса закрыл бы остаток строки, а обратная косая черта в строковом литерале прочиталась бы как экранирование.
  • Функция также возвращает текст без изменений, если он длиннее 64 КБ, круглые скобки и выражения CASE вложены глубже 64 уровней или в тексте есть последовательность символов без пробелов длиннее 1024 байт: форматирование такого текста заняло бы слишком много времени и памяти.
  • Результат имеет тип TEXT.

Примеры

SELECT pico_sql_pretty('select   a,b from t   where a=$1');
Результат
+-----------------------------------+
| col_1                             |
+===================================+
| "select a, b from t where a = $1" |
+-----------------------------------+

Длинный запрос выводится на нескольких строках:

SELECT pico_sql_pretty(
  'select t.a, t.b, count(*) from some_long_table_name t' ||
  ' join other_table o on t.a = o.a where t.b > 10' ||
  ' group by t.a, t.b order by 3 desc');
Результат
select
  t.a,
  t.b,
  count(*)
from
  some_long_table_name t
  join other_table o on t.a = o.a
where
  t.b > 10
group by
  t.a,
  t.b
order by
  3 desc