PostgreSQL은 더 많은 출력을 비활성화합니다


146

PostgreSQL 서버에서 스크립트를 실행하고 있습니다 :

psql db -f sql.sql

스크립트 에서 bash또는 cron스크립트에서.

more또는로 출력을 페이지 매김하려고 시도합니다 less.

에서 결과 페이지 매김을 비활성화하려면 어떻게합니까 psql?

내가하고 싶은 일은 데이터를 변경하는 것입니다. 출력에 관심이 없습니다.

답변:


244

페이지 매김을 비활성화 하고 출력을 유지 하려면 다음을 사용하십시오.

\pset pager off

이 설정을 기억하려면 ~ / .psqlrc에 추가하십시오 .

psql 매뉴얼을 참조하십시오 .

이전 버전의 Pg에서는 토글 일 뿐이므로 \pset pager

쿼리 출력을 완전히 억제하려면 스크립트 \o /dev/null에서를 사용 하십시오 psql.

psql의 정보 출력 을 억제하려면 환경에서 실행 -q하거나 QUIET=1환경에서 설정 하십시오.


결과를 멀리 던져하려면 리디렉션 할 수 있습니다 stdout/dev/null와 :

psql db -f sql.sql >/dev/null

다음을 사용하여 stdout 및 stderr을 모두 리디렉션 할 수 있습니다.

psql db -f sql.sql >&/dev/null

그러나 뭔가 잘못되었다고 경고 할 수있는 오류 정보를 버릴 것이므로 권장하지 않습니다. 또한 결과를 생성하여 버리고 있습니다. 이는 비효율적입니다. 쿼리를 조정하여 처음부터 생성하지 않는 것이 좋습니다.


그것은 호출기를 사용하지 못하게하지만 출력을 멈추지 않습니다. PAGER="/dev/null" psql db -P pager=always -f sql.sql항상 출력 을 강제 종료해야 한다고 생각합니다 .
Harald Brinkhof

112

나는 이것도 찾고 있었고, ServerFault 와 비슷한 질문 에서 길을 찾았습니다 .

psql -P pager=off <other params>

출력을 억제하지 않고 페이징을 끕니다.


4
이 답변은 매뉴얼 페이지의 -P에 대한 정보보다 도움이되었습니다. 감사!
nortally

그것이 바로 내가 필요로하는 것입니다. 감사합니다 :)
Pradip Das

13

다른 옵션이 있습니다. psql 옵션 이름 등을 기억할 필요가 없다는 장점이 있습니다.

psql ... | cat

절대적인 팁! +1
sjas

11

인 bash 에는 출력 데이터를 리디렉션 할 수있는 2 개의 스트림 이 있습니다 : stdout 및 stderr.이 출력은 어딘가에 리디렉션되어야하기 때문에 리눅스는 / dev / null을 통해 도달 할 수있는 특정 'discard everything'노드를 가지고 있습니다. 당신이 보낸 모든 것은 공허로 사라질 것입니다.

(쉘에도 입력 스트림이 있지만 출력 억제를 요청했기 때문에 여기서 무시합니다.)

이 스트림은 stdout의 경우 1, stderr의 경우 2로 숫자로 표시됩니다.

따라서 stdout을 리디렉션하려면 <and >연산자 를 사용하여 수행하십시오 (기본적으로 데이터가 흐르는 위치)

stdout을 억제하고 싶다고 가정하자 (/ dev / null로 리디렉션) :

psql db -f sql.sql > /dev/null

보시다시피 이것이 stdout이 기본값이며, 작성하려는 스트림 번호를 사용하려는 경우 스트림 번호가 사용되지 않은 것입니다

psql db -f sql.sql 1> /dev/null

stderror (스트림 번호 2)를 억제하려면 다음을 사용하십시오.

psql db -f sql.sql 2> /dev/null

stderror를 stdout으로 변환하는 것과 같이 한 스트림을 다른 스트림으로 리디렉션 할 수도 있습니다. 이는 모든 출력을 어딘가에 정기적이고 오류로 저장하려는 경우에 유용합니다.

psql db -f sql.sql 2>&1 > log.txt

사이에 공백이있을 수 없습니다 2>&1

마지막으로 그리고 때로는 가장 흥미로운 것은 &>'완벽하게 조용한'원할 때를 사용하여 모든 출력을 억제 할 수 있다는 사실입니다.

psql db -f sql.sql &> /dev/null


1
이 정보는 원칙적으로 건전하지만 psql은 정보 메시지를 stderr로 보내지 않기 때문에이 특정한 경우에는 전혀 작동하지 않습니다. 그들은 stdout의 데이터와 섞여 있습니다.
Jonathan Hartley

갑자기 당신의 요점은 모든 출력을 억제함으로써 페이저를 중지하기 위해 OP에서 최종 '&>'케이스를 사용할 수 있다는 것입니다. 어떤 식 으로든 답을 수정하면 다운 보트를 제거하겠습니다.
Jonathan Hartley


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.