I have a database where one of the tables stores a blob (bytea
) of all kinds of generic data collected from another system. The bytea
field can have anything in it. In order to know how to interpret the data, the table also has a format field. I wrote a Java application to read the bytea
field from the database as a byte[]
and then I can easily convert it to double[]
or int[]
or whatever the format field says by using ByteBuffer
and the various views (DoubleBuffer
, IntBuffer
, etc.).
Now I have the situation where I need to do some manipulation of the data on the database itself within a trigger function in order to maintain integrity with another table. I can find conversions for just about any data type imaginable, but I can't find anything for going from bytea
(or even bit
) to double precision
and back. A bytea
can be broken up, converted to bits, and then converted to an int
or bigint
, but not a double precision
. For example, x'deadbeefdeadbeef'::bit(64)::bigint
will convert to -2401053088876216593
with no problems, but x'deadbeefdeadbeef'::bit(64)::double precision
fails with "ERROR: cannot cast type bit to double precision" instead of giving the IEEE 754 answer of -1.1885959257070704E148
.
I found this answer https://stackoverflow.com/a/11661849/5274457, which basically implements the IEEE standard to convert bits to double, but is there really not a basic conversion function in PostgreSQL to do this? Plus, I need to go backwards as well from double precision
to bytea
when I'm done manipulating the data and need to update the tables, which this answer doesn't provide.
Any ideas?