Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在postgresql中to_jsonb()会将bigint转换为number?_Postgresql_Knex.js - Fatal编程技术网

为什么在postgresql中to_jsonb()会将bigint转换为number?

为什么在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

我使用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\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解析为本机js
BigInt
s。