如何将bynary数字转换为bytea?

时间:2018-01-30 12:11:56

标签: postgresql

select
 '1000000011011110101111100001101101100000011100110011001100111111'::bit(64)
 as x;

我需要转换为其他表示形式,如十六进制,base64或在函数中使用它进行base36或base58转换......所以需要转换为bytea。但是没有x::bytea最简单的方法是什么?

1 个答案:

答案 0 :(得分:1)

使用decode():

with data(val) as (
values (
    '1000000011011110101111100001101101100000011100110011001100111111'::bit(64))
)

select decode(to_hex(val::bigint), 'hex')
from data;

       decode       
--------------------
 \x80debe1b6073333f
(1 row) 

该函数返回bytea,您可以将其编码为base64

select encode(decode(to_hex(val::bigint), 'hex'), 'base64')
from data;

    encode    
--------------
 gN6+G2BzMz8=
(1 row) 

注意:对于更大的tham bigint二进制文件,您需要使用GMP external extensionmpz数据类型...并检查是否转换为{{ 1}}工作正常,或使用GMP直接转换。