Представление байтов PostgreSQL 9.X в «шестнадцатеричном» или «экранированном» виде для миниатюр

Мое приложение (разработанное в компонентах Delphi и ZEOS) использует PostgreSQL 8.4 и хранит несколько эскизов в столбце bytea.

Я хочу перейти на PostgreSQL 9.2 и восстановить дамп, и все работает нормально, за исключением случаев, когда я пытаюсь получить эти изображения: Postgres 9.2 использует hex для представления вывода вместо escape, используемого в Postgres 8.4.

Есть два возможных решения: изменить настройки Postgres 9.2 для представления escape или изменить строку hex в двоичных данных через приложение. Но каково лучшее решение? Почему PostgreSQL 9.X изменился на hex для представления bytea?
Это простая настройка или есть технические причины?


person AndreaBoc    schedule 17.06.2013    source источник


Ответы (1)


Обоснование было дано в примечаниях к выпуску Postgres 9.0:

  • Разрешить запись значений bytea в шестнадцатеричном формате (Питер Эйзентраут)

Параметр сервера bytea_output определяет, используется ли шестнадцатеричный или традиционный формат для вывода bytea. Функция Libpq PQescapeByteaConn() автоматически использует шестнадцатеричный формат при подключении к серверам PostgreSQL 9.0 или новее. Однако версии libpq до 9.0 не будут правильно обрабатывать шестнадцатеричный формат с более новых серверов.

Новый шестнадцатеричный формат будет напрямую совместим с большим количеством приложений, использующих двоичные данные, что позволит им хранить и извлекать их без дополнительного преобразования. Кроме того, чтение и запись значительно быстрее, чем в традиционном формате.

Кажется, вы уже знаете о bytea_output< /а>.

person Erwin Brandstetter    schedule 17.06.2013