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.