programing

Postgre의 JSON 데이터 유형 크기 제한SQL

lastmoon 2023. 3. 28. 22:31
반응형

Postgre의 JSON 데이터 유형 크기 제한SQL

Postgre에서 JSON 데이터 타입의 크기 제한을 알고 있는 사람 있습니까?SQL 9.2?

Postgre 소스 보기SQL 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));
}

Postgre 업데이트SQL 9.3.5:

에서 코드가 변경되었습니다.json_injson 내부 표현은 여전히 텍스트입니다.

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와 같다textJSON 유효성 검사를 사용하는 데이터 유형입니다.text데이터 유형의 최대 크기는 1GB입니다.

위해서jsonb필드, 소스 코드의 jsonb.c를 보면 다음 함수가 표시됩니다.

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_OFFLENMASK바이트 수

jsonb.h에서 이 상수는 다음과 같이 정의됩니다.

#define JENTRY_OFFLENMASK       0x0FFFFFFF

255 MB 입니다.

Postgre 소스코드에서 확인했습니다.SQL 9.4, 최대 15

언급URL : https://stackoverflow.com/questions/12632871/size-limit-of-json-data-type-in-postgresql

반응형