2012-09-28 106 views

回答

45

查看源对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_in功能发生了变化,但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但瓦特ith JSON验证。 text数据类型的最大大小为1GB

+7

Postgres的'jsonb'数据类型是否使用纯文本以外的东西? –

+2

1GB!这很不错。很高兴这个数字不是MB。 – edencorbin