Конференция Arenadata
ArenaTech 2026 – для всех, кому интересны технологии Big Data
Приглашаем вас принять участие в технической онлайн-конференции, посвященной работе с большими данными. Участие бесплатно для всех желающих.

В программе 3 блока докладов:

  • СУБД: архитектура и эксплуатация. Обсудим новые возможности Greengage DB и Arenadata DB на его основе, включая hot standby, обзор утилиты изменения кластерной топологии ggrebalance, вопросы безопасности и устранения CVE.
  • Платформа данных: безопасность и Kubernetes в ADH, аналитика в ADQM. Расскажем об управлении секретами и доступом в Arenadata Hyperwave с использованием OpenBao, особенности переноса сервисов в Kubernetes, а также про аналитические методы в инструментах ADQM.
  • Инструменты: кластерный менеджер, документация, ИИ-поиск. Поделимся опытом разработки технической документации (включая интеллектуальный поиск и ИИ-ассистент) и поговорим про развитие нашего кластерного менеджера ADCM.
Онлайн-конференция состоится 29 октября 2026 года, время трансляции: с 12:00 до 19:00 по московскому времени.
Осталось до события

Тип данных bytea

Тип данных bytea позволяет хранить двоичные строки переменной длины. Двоичная строка представляет собой последовательность октетов (байтов). Двоичные строки отличаются от строк символов следующим:

  • Двоичные строки позволяют хранить октеты нулевых значений и другие "непечатаемые" октеты. Строки символов не допускают нулевых октетов и любых других октетов, не соответствующих кодировке базы данных.

  • Операции с двоичными строками обрабатывают байты, обработка символьных строк зависит от настроек языковых стандартов.

Двоичные строки предназначены для операций с "сырыми байтами" ("raw bytes"), строки символов — для работы с текстом.

Тип данных bytea добавляет 1 или 4 байта к размеру двоичной строки.

Bytea поддерживает два формата ввода и вывода: hex и исторический формат PostgreSQL escape. Входящие данные могут быть в одном из этих форматов. Выходной формат определяет параметр конфигурации bytea_output, его значение по умолчанию — hex.

Формат bytea hex

Формат hex кодирует двоичные данные двумя шестнадцатеричными цифрами на байт. Он имеет следующий формат:

 '\x<binary string>'

Пример:

SELECT '\xDEADBEEF';

Шестнадцатеричные цифры могут быть в верхнем или нижнем регистре, пробелы разрешены между парами цифр и запрещены внутри пары цифр и в начале последовательности \x. Формат hex совместим с широким спектром приложений и протоколов, и его преобразование происходит быстрее, чем формата escape.

Формат bytea escape

Формат escape — традиционный формат PostgreSQL для типа bytea. Он представляет двоичную строку как последовательность символов ASCII и преобразует байты, которые не могут быть представлены в виде символов ASCII, в спецпоследовательности.

Чтобы заэкранировать октет, преобразуйте его в трехзначное восьмеричное значение и поставьте перед ним обратную косую черту (\). Чтобы добавить символ обратной косой черты к двоичной строке, используйте двойную обратную косую черту (\\). В то время как любое значение октета может быть заэкранировано, октеты из таблицы ниже должны быть заэкранированы.

Десятичное значение байта Описание Входящая спецпоследовательность Пример Шестнадцатеричное представление

0

Нулевой байт

'\000'

'\000'::bytea

\x00

39

Одиночная кавычка

'''' или '\047'

''''::bytea

\x27

92

Обратная косая черта

'\\' или '\134'

'\\'::bytea

\x5c

от 0 до 31 и от 127 до 255

"Непечатаемые" октеты

'\xxx' (восьмеричное значение)

'\001'::bytea

\x01

Требования экранирования "непечатаемых" символов определяются настройками языковых стандартов.

Октеты bytea по умолчанию выводятся в шестнадцатеричном формате.

Если вы измените bytea_output на escape, PostgreSQL преобразует "непечатаемые" октеты (десятичные значения октетов от 0 до 31 и от 127 до 255) в эквивалентные трехзначные восьмеричные значения. Печатные октеты выводятся в виде стандартного представления в кодировке клиента. Обратная косая черта при выводе дублируется.

Пример:

SET bytea_output = 'escape';

SELECT 'abc \144\145\146 \052 \251 \134'::bytea;

Результат:

       bytea
-------------------
 abc def * \251 \\
РЕКОМЕНДАЦИЯ
Формат escape стирает различия между двоичными строками и символьными строками и имеет громоздкий механизм экранирования спецпоследовательностей. Используйте формат hex вместо escape, если это возможно.

Функции и операторы для работы с двоичными строками

PostgreSQL предоставляет множество функций и операторов для работы с двоичными строками. Многие из них эквивалентны функциям для работы с текстовыми строками. В этом разделе приведены несколько примеров. За дополнительной информацией обратитесь к документации PostgreSQL: Binary string functions and operators.

SQL-функции и операторы

Ниже приведены некоторые SQL-операторы и функции, которые можно использовать для работы с двоичными строками:

  • Две двоичные строки можно объединить оператором ||:

    SELECT '\x123456'::bytea || '\x789a00bcde'::bytea;

    Результат: \x123456789a00bcde.

  • Функция position возвращает начальный индекс первой найденной подстроки в байтах или ноль, если подстрока не найдена:

    SELECT position('\x5678'::bytea in '\x1234567890'::bytea);

    Результат: 3.

  • Функция substring извлекает подстроку, которая начинается с указанного байта и имеет указанную длину в байтах. Функция имеет следующий синтаксис:

    substring ( bytes bytea [ FROM start integer ] [ FOR count integer ] ) → bytea

    Пример:

    SELECT substring('\x1234567890'::bytea from 3 for 2);

    Результат: \x5678.

Функции для преобразования текстовых/двоичных строк

PostgreSQL позволяет конвертировать строки между различными кодировками и преобразовывать двоичные данные в текстовую форму. Доступные преобразования перечислены в статье Available character set conversions. Вы можете использовать следующие функции для преобразования:

  • convert преобразует двоичную строку, содержащую текст в исходной кодировке, в двоичную строку в результирующей кодировке.

    convert ( <двоичная_строка> bytea, <исходная_кодировка>, <результирующая_кодировка> ) → bytea

    Пример:

    SELECT convert('text_in_utf8', 'UTF8', 'LATIN1');

    Результат: \x746578745f696e5f75746638.

  • convert_from преобразует двоичную строку, содержащую текст в исходной кодировке, в текст в кодировке базы данных.

    convert_from ( <двоичная_строка> bytea, <исходная_кодировка> ) → text

    Пример:

    SELECT convert_from('\x746578745f696e5f75746638', 'UTF8');

    Результат: text_in_utf8.

   

  • convert_to преобразует текстовую строку в кодировке базы данных в двоичную строку в результирующей кодировке.

    convert_to ( <текстовая_строка> text, <результирующая_кодировка> ) → bytea

    Пример:

    SELECT convert_to('some_text', 'UTF8');

    Результат: \x736f6d655f74657874.

  • encode кодирует двоичные данные в текстовое представление. Поддерживаемые форматы: base64, escape, hex.

    encode ( <двоичная_строка> bytea, <формат> text ) → text

    Пример:

    SELECT encode('\x41445047', 'base64');

    Результат: QURQRw==.

  • decode декодирует двоичные данные из текстовой строки. Поддерживаемые форматы: base64, escape, hex.

    decode ( <текстовая_строка> text, <формат> text ) → bytea

    Пример:

    SELECT decode('QURQRw==', 'base64');

    Результат: \x41445047.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней