2017-10-13 1 views
1

쿼리의 최대 크기에 대해 흩어져있는 정보가 발견되었습니다.이 정보는 20MB에서 1GB 이상까지 다양합니다.Postgres에 허용되는 가장 긴 쿼리 문자열 길이를 찾는 방법은 무엇입니까?

테이블에 약 200k 행을 삽입하는 긴 쿼리 문자열이 있습니다. 디버그 출력에서 ​​나는 문자열이 약 38MB 크기 인 39759604 문자 길이라는 것을 알 수있다.

이 쿼리를 실행하면 연결이 종료되고 데이터베이스가 복구 모드로 전환됩니다.

쿼리 문자열의 크기를 줄여 쿼리 문자열의 크기를 줄이면 쿼리가 성공적으로 실행됩니다.

나는 16Gb의 RAM을 가지고 있으며 그 중 9GB가 사용되는 것을 볼 수있다. 여기

은 포스트 그레스의 OUPUT가 로그인되어

2017-10-13 12:51:03.110 UTC [1] LOG: server process (PID 93) was terminated by signal 9: Killed 
2017-10-13 12:51:03.110 UTC [1] DETAIL: Failed process was running: INSERT INTO stats(...) VALUES ... 
2017-10-13 12:51:03.115 UTC [1] LOG: terminating any other active server processes 
2017-10-13 12:51:03.115 UTC [116] WARNING: terminating connection because of crash of another server process 
2017-10-13 12:51:03.115 UTC [116] DETAIL: The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory. 
2017-10-13 12:51:03.115 UTC [116] HINT: In a moment you should be able to reconnect to the database and repeat your command. 

어떻게 내 특별한 경우에 무엇을 최대 쿼리 크기 사용할 수 있습니다 알 수 있습니까?

+0

는 쿼리를 리팩토링 고려할 것 SQL 길이하기 전에 다른 한계를 칠 것 같아? .. 내 말은 아마 커널 설정의 의존하지만 어쩌면 당신은 더 나은 접근 방식을 변경? .. –

+0

단일 명령으로 각 행 삽입 쿼리를 실행하려고 시도하고 꽤 오래 걸립니다. –

+0

그래서 여러분은'삽입 ... VALUES(),(),() ...'크기가 38 MB입니까? .. 그러면 csv를 생성 한 후'COPY'가 훨씬 더 빠르고 안전하게 될 것입니다. –

답변

1

나는 최대 길이의 진술을 시도하는 것보다 다른 접근법을 시도 할 것이다. 문장을 생성하면 csv를 생성 할 수 있습니다 (또는 이미 가질 수도 있음). csv를 테이블에로드하는 것은 다중 선 INSERT보다 훨씬 빠릅니다.

데이터를로드하기 전에 변환이 필요하면 임시 보조 테이블에 COPY FROM csv을 입력 한 다음 INSERT INTO orig SELECT transfor FROM temp을 입력하면됩니다. 심지어 예를 들어, 같은 작업을 위해 설계된 몇 가지 도구를 시도 : http://pgloader.io/howto/pgloader.1.html

-l, --load-LISP 파일을 : 할 수 있도록 명령을 읽기 전에 컴파일하고 pgloader 이미지로로드 할 혀짤배기 지정 추가 변환 함수를 정의하십시오. 이러한 함수는 pgloader.transforms 패키지에 정의 된 이어야합니다. 이 옵션은 명령 행에서 두 번 이상 으로 나타날 수 있습니다. 원래 소식 응답도

업데이트 : https://dba.stackexchange.com/a/131425/30035

그래서 질의 크기가 1 기가 바이트 (2^30), 음의 널 (null) 바이트가 종결 1 바이트로 제한된다.

는하지만 난 당신이

관련 문제