Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
12.05.2017, 09:57
|
|||
---|---|---|---|
|
|||
cats (bytea to real) или cats (bit(32) to real) |
|||
#18+
Коллеги, подскажите пожалуйста оптимальный подход для преобразования 4-х байтов bytea в real. Примерное описание проблемы таково: Есть структуры C++ c 32-разрядной машины которые в бинарном виде льются в bytea поле на Postgres(amd64). Структуры состоят из набора чисел (целочисленных и с плав. точкой). Нужно уметь это парсить на стороне СУБД. С целочисленными я разобрался методом get_byte\git_bit и работает с приемлемой скоростью. А вот с float\double трудновато как-то. Нашёл на pgplsql процедуру по пересчёту но её производительность не устраивает. Понятно, что наверное существенно быстрее будет работать написанная на С процедура которая из 4-х байт делает float. Но, думаю, я же не первый с такой проблемой. Поделитесь плс. опытом в какую сторону двигаться. В попытках cast вод до этого я дошёл пока: postgres=# select get_byte(float4send(0.15625),0)::bit(8),get_byte(float4send(0.15625),1)::bit(8),get_byte(float4send(0.15625),2)::bit(8),get_byte(float4send(0.15625),3)::bit(8); get_byte | get_byte | get_byte | get_byte ----------+----------+----------+---------- 00111110 | 00100000 | 00000000 | 00000000 (1 строка) postgres=# select cast(x'3E200000' as real); ОШИБКА: привести тип bit к real нельзя СТРОКА 1: select cast(x'3E200000' as real); ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=53&mobile=1&tid=1996523]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
26ms |
get tp. blocked users: |
2ms |
others: | 335ms |
total: | 439ms |
0 / 0 |