【发布时间】:2019-08-23 08:11:05
【问题描述】:
我正在尝试在 Postgres 中复制一些 java 代码。
我需要执行的操作是将JavaBigInteger转换为byte array
Java 代码:
public class Main {
public static void main(String[] args) {
BigInteger n = new BigInteger("1677259342285725925376");
System.out.println(Arrays.toString(n.toByteArray()));
}
}
输出: [90, -20, -90, 53, 78, -38, 2, -128, 0]
Postgres 代码:
select numeric_send(1677259342285725925376);
输出: "\000\006\000\005\000\000\000\000\000\020\036-$~\013)\012 \025\000"
使用numeric_send 将数字转换为bytea
http://www.leadum.com/downloads/dbscribe/samples/postgresql/web_modern/function/main/643567399.html
为了像 Java 控制台一样检查输出,我在匿名块下面写了
do
$$
declare
bytes bytea;
begin
bytes := numeric_send(1677259342285725925376);
for i in 0..length(bytes)-1 loop
raise notice '%', get_byte(bytes,i);
end loop;
end; $$
现在输出打印为:
NOTICE: 0
NOTICE: 6
NOTICE: 0
NOTICE: 5
NOTICE: 0
NOTICE: 0
NOTICE: 0
NOTICE: 0
NOTICE: 0
NOTICE: 16
NOTICE: 30
NOTICE: 45
NOTICE: 36
NOTICE: 126
NOTICE: 11
NOTICE: 41
NOTICE: 10
NOTICE: 32
NOTICE: 21
NOTICE: 0
根据我的说法,输出应该与我在两者中都转换为字节数组相同。请帮助我如何实现同样的目标。
谢谢
【问题讨论】:
-
为什么在 Postgres 中需要它?您试图解决的根本问题是什么?
-
@a_horse_with_no_name 我们在 postgres 中使用
plpythonu扩展来进行此类操作,因为AWS RDS不支持plpythonu。所以,我们需要在 postgres 中创建这些函数。
标签: java arrays postgresql bytea