Jun*_*ing 5 postgresql endianness bytea
我有一个PostgreSQL表,我想将列从bigint一个bytea字节改为字节以保存更多数据.我在想使用以下顺序:
alter table mytable add new_columnupdate mytable set new_column = int8send(old_column)alter table drop old_columnalter table rename new_column to old_column上述序列的工作,唯一的问题是,我想在字节序列bytea被逆转.例如,如果一个值old_column是0x1234567890abcdef,上面的序列会产生\0224Vx\220\253\315\357,但我希望它是
\357\315\253\220xV4\022.似乎结果bytea使用了来自原始的big-endian命令bigint.
没有编写程序,有没有一种简单的方法可以做到这一点?我swap64()在PostgreSQL中寻找一种功能但却找不到它.
这个功能虽然不完全是您正在寻找的功能,但应该可以帮助您顺利完成任务。
下面逐字复制了该函数的源代码。
CREATE OR REPLACE FUNCTION utils.int_littleendian(v_number integer)
RETURNS bytea AS
$BODY$
DECLARE
v_textresult bytea;
v_temp int;
v_int int;
v_i int = 0;
BEGIN
v_int = v_number;
v_textresult = '1234';
WHILE(v_i < 4) LOOP
raise notice 'loop %',v_int;
v_temp := v_int%256;
v_int := v_int - v_temp;
v_int := v_int / 256;
SELECT set_byte(v_textresult,v_i,v_temp) INTO v_textresult;
v_i := v_i + 1;
END LOOP;
return v_textresult;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2500 次 |
| 最近记录: |