PostgreSQL中JSON数据类型的大小限制

PostgreSQL中JSON数据类型的大小限制,json,postgresql,postgresql-9.2,Json,Postgresql,Postgresql 9.2,有人知道PostgreSQL 9.2中JSON数据类型的大小限制吗?查看PostgreSQL 9.2.1的源代码: Source: postgresql-9.2.1\src\backend\utils\adt\json.c: /* * Input. */ Datum json_in(PG_FUNCTION_ARGS) { char *text = PG_GETARG_CSTRING(0); json_validate_cstring(text); /*

有人知道PostgreSQL 9.2中JSON数据类型的大小限制吗?

查看PostgreSQL 9.2.1的源代码:

Source: postgresql-9.2.1\src\backend\utils\adt\json.c:
/*
 * Input.
 */
Datum
json_in(PG_FUNCTION_ARGS)
{
    char       *text = PG_GETARG_CSTRING(0);

    json_validate_cstring(text);

    /* Internal representation is the same as text, for now */
    PG_RETURN_TEXT_P(cstring_to_text(text));
}
PostgreSQL 9.3.5的更新:

在函数中的
json_中,代码已更改,但json内部表示仍然是文本:

Source: postgresql-9.3.5\src\backend\utils\adt\json.c:
/*
 * Input.
 */
Datum
json_in(PG_FUNCTION_ARGS)
{
    char       *json = PG_GETARG_CSTRING(0);
    text       *result = cstring_to_text(json);
    JsonLexContext *lex;

    /* validate it */
    lex = makeJsonLexContext(result, false);
    pg_parse_json(lex, &nullSemAction);

    /* Internal representation is the same as text, for now */
    PG_RETURN_TEXT_P(result);
}

因此,至少目前来看,
json
text
数据类型相同,但带有json验证。
text
数据类型的最大大小为。

对于
jsonb
字段,如果查看源代码中的,您将看到此函数:

checkStringLen(size_t len)
{
    if (len > JENTRY_OFFLENMASK)
        ereport(ERROR,
                (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
                 errmsg("string too long to represent as jsonb string"),
                 errdetail("Due to an implementation restriction, jsonb strings cannot exceed %d bytes.",
                           JENTRY_OFFLENMASK)));

    return len;
}

错误代码表示jsonb字符串不能超过
JENTRY\u OFFLENMASK
字节

在中,该常数定义为:

#define JENTRY_OFFLENMASK       0x0FFFFFFF
这是255MB


我在PostgreSQL 9.4至13的源代码中对此进行了检查。

Postgres
jsonb
数据类型是否使用纯文本以外的内容?1GB!那太好了。很高兴这个数字不是MB。@edencorbin它是1024MB:)不是1000MB吗?;)从技术上讲,MB(兆字节)是1000,MiB(兆字节)是1024,但每个人都使用MB(兆字节)来引用1024。我不确定公认的答案是1GB,但我昨天遇到了这个确切的错误。我的json的大小刚刚超过300Mb。因为jsonb!=json