为什么在postgresql中to_jsonb()会将bigint转换为number?
我使用KnexJS从PostgreSQL获取数据,在某些地方,我使用以下模式:-为什么在postgresql中to_jsonb()会将bigint转换为number?,postgresql,knex.js,Postgresql,Knex.js,我使用KnexJS从PostgreSQL获取数据,在某些地方,我使用以下模式:- select to_jsonb(s.*) as student, to_jsonb(st.*) as subject_test from subject_tests st inner join students s on st.student_id = s.id where st.date >= '...' 我面临的问题是,如果subject\u test表中的id列是一个bigint,我会在subject
select to_jsonb(s.*) as student, to_jsonb(st.*) as subject_test
from subject_tests st
inner join students s on st.student_id = s.id
where st.date >= '...'
我面临的问题是,如果
subject\u test
表中的id
列是一个bigint,我会在subject\u test
对象中将其作为一个数字取回。这可能是不准确的,因为bigint能够存储超出javascript数字类型范围的内容。为什么to_jsonb
不将bigint转换为json中的字符串?有办法解决这个问题吗?您可以使用强制转换操作符:
将bigint转换为文本
例如:
create table test(id bigint, name varchar);
insert into test values(1,'A');
insert into test values(2,'B');
select to_jsonb(t1) from test t1
to_jsonb
----------------------
{"id": 1, "name": "A"}
{"id": 2, "name": "B"}
select to_jsonb(t1.*) from (
select id::text,name from test) t1
to_jsonb
{"id": "1", "name": "A"}
{"id": "2", "name": "B"}
因为JSON可以表示任意大的数字。只有JavaScript的数字类型不能,而且
JSON.parse
不在乎。请参阅关于如何将JSON解析为本机jsBigInt
s。