psql: 인수 목록이 너무 긴 오류를 해결하는 방법은 무엇입니까?

psql: 인수 목록이 너무 긴 오류를 해결하는 방법은 무엇입니까?

다음 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.

관련 정보