|
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); ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2017, 09:57 |
|
|
start [/forum/topic.php?fid=53&fpage=74&tid=1996523]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
26ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 109ms |
0 / 0 |