다음 psql 명령이 포함된 스크립트가 있습니다.
psql -h $PHOST -p $PPORT -U $PUSER -d $PDATABASE -c "SELECT COUNT(*) FROM (${SQL%?}) AS query;"
하나 또는 두 개의 관계를 쿼리하는 간단한 쿼리를 전달하면 문제가 없습니다. 그러나 긴 쿼리를 전달하면 다음 오류가 발생합니다.
/usr/bin/psql: Argument list too long
mv 명령을 사용하여 "매개변수 목록이 너무 김"에 대한 해결책을 찾았지만 시도했지만 아무것도 변경되지 않았습니다.
ulimit -S -s unlimited
이전에 MAX_ARG 크기를 늘리기 위해 psql 명령을 사용했지만 여전히 오류가 발생했습니다 .
psql: 인수 목록이 너무 긴 오류를 해결하는 방법은 무엇입니까?
답변1
psql은 큰 문자열이어야 하므로 여기서는 이 xargs
트릭이 작동하지 않습니다 .-c
다른 접근 방식을 시도해 보세요. 모든 SQL을 statements.sql
이름이 지정된 파일 에 넣고 psql
다음과 같이 시작하세요.
psql -h "$PHOST" -p "$PPORT" -U "$PUSER" -d "$PDATABASE" -f statements.sql
만들다 statemements.sql
:
printf 'SELECT COUNT(*) FROM (%s) AS query;\n' "${SQL%?}" >statements.sql
printf
이 명령은 쉘에 내장된 유틸리티와 같은 "인수 목록이 너무 김" 문제를 겪지 않습니다 bash
.