Чтобы работать со значениями bytea в PostgreSQL, я обычно сериализую в шестнадцатеричный формат и десериализую из него. Это кажется предпочтительным способом. Однако что на самом деле хранится на сервере PostgreSQL? Это шестнадцатеричный или нешестнадцатеричный двоичный файл? Причина, по которой меня это волнует, заключается в том, что hex, очевидно, будет занимать вдвое больше места, чем unhexed binary. Когда я говорю нешестнадцатеричный двоичный, я имею в виду, что шестнадцатеричная строка 00, состоящая из 2 байтов, представляет собой просто 0, то есть 1 байт, как нешестнадцатеричный двоичный код.
Контекст: у меня есть база данных Postgres и база данных Scylla, которые хранят одни и те же данные почти в одном и том же формате. Однако общее пространство, используемое Postgres, почти вдвое превышает пространство, используемое Scylla. Для Сциллы я не кодирую двоичный код как шестнадцатеричный. Я просто отправляю необработанный двоичный файл по сети. Я не ожидаю, что эти две базы данных будут использовать одинаковый объем пространства. Но для PostgreSQL использовать двойное пространство довольно много накладных расходов, и почти точное удвоение действительно заставляет меня подозревать, что данные хранятся на сервере в шестнадцатеричном, а не в двоичном формате (поскольку шестнадцатеричный использует ровно двойное пространство как фактический двоичный).