Инструменты баз данных и SQL

Парсер массивов PostgreSQLи проверка интервалов

Вставьте исходное значение массива или интервала и проверьте структуру без выполнения запроса к базе.

Парсер массивов PostgreSQL

Исходное значение PostgreSQL

Отчёт JSON

Значения обрабатываются в этом браузере без отправки, подключения к базе или сетевых запросов.

Параметры ввода

Вставьте значение без внешних SQL-кавычек и приведений типов. Элементы кроме NULL остаются строками, поля интервала — раздельными.

65 536 символов · 10 000 элементов · 6 измерений · секунды: до 6 десятичных знаков

Измерения: 2 · элементы: 6 · NULL: 1

Парсер массивов PostgreSQL пригодится, когда драйвер или экспорт возвращает строку в фигурных скобках вместо готовой структуры. Простое разделение по запятым не работает, если запятая или экранированная кавычка находится внутри самого элемента.

В примере можно сравнить NULL, текст "NULL" и пустую строку. Для интервала сначала выберите формат вывода исходной базы: от него зависит, на какие поля распространяется начальный минус.

Зачем нужен парсер массивов PostgreSQL

Исходные индексы остаются в отчёте

Парсер массивов PostgreSQL показывает вложенные значения, длину и границы каждого измерения. Если массив начинается с нуля или отрицательного индекса, метаданные сохраняют эту особенность, хотя обычный JSON-массив не хранит границы индексов PostgreSQL.

Два ряда по три ячейки сохраняют вложенность массива; отсутствующее значение отличается от текста в кавычках

Календарные единицы не смешиваются со временем

Месяц не равен фиксированному числу секунд. Интервал PostgreSQL остаётся разделённым на месяцы, дни и микросекунды. Разные знаки полей сохраняются, чтобы предполагаемая длина месяца не изменила смысл исходного значения.

Интервал разделён на календарь месяцев, ячейку дня и точные часы

Что проверить до экспорта

01

Смена режима не стирает текст

Под редакторами выберите массив или интервал. Меняются правила разбора, но исходный текст остаётся. Кнопка примера сначала показывает подходящее значение и число заменяемых символов; замена происходит только после применения.

02

Проверьте границы и знаки

Первое измерение исходного примера начинается с нулевого индекса. Посмотрите dimensions и nullCount в JSON. В sql_standard единственный начальный минус может относиться и к последующим дням и времени; формат источника следует выбрать явно.

03

Управляйте моментом обновления

Автоматический разбор ждёт 350 мс после последнего изменения. Если его выключить, доступны кнопка разбора и Ctrl/Cmd+Enter. При редактировании экспорт сразу блокируется. Длинный отчёт показывается по 100 строк, но копирование и загрузка включают его целиком.

Структура и точные значения

Тип не определяется по внешнему виду

При преобразовании массива PostgreSQL в JSON строки вроде 001 и очень больших целых остаются строками. Литерал массива не содержит тип столбца. Многомерный массив должен быть прямоугольным: неодинаковые строки вызывают ошибку, без дополнения NULL или выравнивания в плоский список.

Кавычки и экранирование разбираются вместе

Обрабатываются защищённые разделители, экранированные кавычки, обратные косые черты и пробелы. Только NULL без кавычек и экранирования становится JSON null. "NULL", экранированный NULL и пустая строка остаются различимыми текстовыми значениями.

Четыре формата с точными полями

Выберите postgres, postgres_verbose, sql_standard или iso_8601. Календарные поля должны быть целыми, секунды допускают до шести десятичных знаков. Три поля рассчитываются целочисленно и экспортируются десятичными строками без потери точности.

Поддерживаемый синтаксис и ограничения

Вводите внутреннее значение без SQL
Допускается {...} с необязательными границами или отдельный интервал. SQL-запросы, конструкторы ARRAY, внешние одинарные кавычки, E-строки, приведения типов и ограничения полей отклоняются. Подключения к базе, импорта файлов и загрузки URL нет.
Проверяется структура, а не тип элемента
По умолчанию используется запятая; для массивов в стиле box можно выбрать точку с запятой. Границы должны соответствовать форме. Пустые вложенные массивы превращаются в пустой массив без измерений. OID, произвольные разделители и array_nulls=off не обрабатываются.
Грамматика интервалов намеренно ограничена
Используйте запись, близкую к выводу выбранного формата. Дробные месяцы, дни, часы и минуты, бесконечность, альтернативная форма ISO, неизвестные единицы и ненулевые числа без единиц отклоняются. Секунды длиннее шести десятичных знаков не округляются. Общая сумма секунд и преобразование в Temporal не предоставляются.
Ограничения без обрезанных результатов
Допускается до 65 536 символов JavaScript, 10 000 элементов массива и шести измерений. Месяцы и дни должны помещаться в знаковое 32-битное целое, микросекунды — в знаковое 64-битное. Любая ошибка блокирует экспорт; частичный результат не выдаётся за полный.

Парсер массивов PostgreSQL: вопросы

Почему PostgreSQL выдаёт malformed array literal?

Обычно причина в незакрытой скобке или кавычке, лишнем разделителе в конце либо внешней SQL-обёртке. Сообщение указывает строку и столбец. Вставьте только значение массива в фигурных скобках и проверьте кавычки и обратные косые черты в отмеченной строке.

Как PostgreSQL обрабатывает NULL в массиве?

NULL без кавычек и экранирования превращается в JSON null независимо от регистра. "NULL" — текст, а "" — пустая строка. Поле nullCount показывает число пустых значений. Отдельный SQL NULL здесь не считается литералом массива; пустой массив обозначается как {}.

Почему при вставке многомерного массива возникает malformed array literal?

Во всех измерениях должны совпадать размеры вложенных массивов. В {{a,b},{c}} строки содержат два и один элемент, поэтому значение отклоняется. Инструмент не добавляет ячейки и не убирает вложенность. Исправьте источник и проверьте соответствие явно указанных границ полученной форме.

Как экранировать двойные кавычки в массивах для PostgreSQL COPY?

Внешнее кодирование поля COPY или CSV — отдельный слой по отношению к синтаксису массива. Здесь разбирается только внутренний слой. В элементе в кавычках перед двойной кавычкой и обратной косой чертой ставится обратная косая черта. Сначала снимите внешнее CSV- или SQL-кодирование.

Почему при переводе интервала PostgreSQL в секунды получаются неожиданные значения?

Длина месяца меняется, а календарный день при переходе на летнее время может отличаться от 24 часов. Пересчёт с постоянным коэффициентом поэтому не всегда равен фактически прошедшему времени. Отчёт сохраняет три поля отдельно; для прошедших секунд нужны конкретные начальная и конечная даты.

Как представить 1 day 01:30:00 в виде 25:30:00?

Внешний SQL-запрос может изменить представление, но при этом дни переходят в поле часов. Здесь 1 day 01:30:00 сохраняет days="1" и microseconds="5400000000". Отдельное 25:30:00 даёт days="0" и microseconds="91800000000", так что разница в структуре остаётся видна.

Остался вопрос?

Проверьте следующее значение

Парсер массивов PostgreSQL помогает проверить границы и элементы. Для интервала выберите формат и сравните три поля перед экспортом JSON.

Один литерал за раз; без автоматического исправления.