다른 분이 만들어 놓으신 코드를 보다가 궁금해서 질문합니다.
textarea로 부터 값을 입력 받아서 저장하는 코드 부분에서
크기 검사를 하더라구요.
length가 50000보다 클경우에는 경고메시지를 보내주는데요.
text 타입의 크기가 정해져 있는것이라서 그런지 의문이 들더라구요.
게시만의 쓰기동작을 만들때 꼭 길이 검사를 해야하는지도 알고 싶구요.
보통 다른 분들은 어떻게 하시는지도 궁금하네요.
답변 기다리겠습니다.
아마 필드 최대 크기 1 GB 제한은 향후 몇 년간은 해결이 안될 것 같습니다.
PGSQL 은 가변길이데이타를 표현하기 위해 2 종류의 구조체를 지원합니다.
varlena 과 varattrib 입니다. 선언은
struct varlena
{
int32 vl_len;
char vl_dat[1];
};
//struct varlena
typedef struct varattrib
int32 va_header; /* External/compressed storage */
union
struct
int32 va_rawsize; // Plain data size
char va_data[1]; // Compressed data
} va_compressed; // Compressed stored attribute
int32 va_extsize; // External saved size
Oid va_valueid; // Unique identifier of value
Oid va_toastrelid; // RelID where to find chunks
} va_external; // External stored attribute
char va_data[1]; // Plain stored attribute
} va_content;
} varattrib;
인데, 위의 선언 대로라면 길이정보가 int 형인것을 알 수 있고 따라서
필드 데이타의 최대 크기는 4G 인처럼 보입니다만
varattrib 의 경우 길이정보의 앞 2 비트는 길이가 아닌
다른 정보를 표현하는데 사용되고 있읍니다.
따라서 4G 의 반의 반(즉 1G) 밖에 길이를 표현할 수 없읍니다.
varlena 구조체를 사용하면 되지 않겠냐 할 수 있지만
varattrib 는 varlena 보다 더 큰 자료형을 표현하기 위해
나왔다는 데에 문제가 있읍니다.
즉 varlena 로는 varattrib 보다 큰 자료를 표현할 수 없다는 것이죠
실제 프로그래밍시에 이것은 거의 문제가 되지 않는데
그래도 나중에는 개선이 되야 하지 않을까 생각합니다.
PostgreSQL의 제한 보다는 게시판이므로 HTTP 프로토콜 때문인 것 같네요...
GET 방식일 경우 전체 크기제한이 있고, 또한 너무 커진다는건 그만큼 전송 시간이 걸려서 그런 제한을 뒀을지도 모르겠네요..