Psql 출력에서 ​​결과 집합 장식을 숨기는 방법


79

psql의 출력에서 ​​열 이름과 행 수를 어떻게 숨기나요?

다음을 사용하여 psql을 통해 SQL 쿼리를 실행하고 있습니다.

psql --user=myuser -d mydb --output=result.txt -c "SELECT * FROM mytable;"

그리고 다음과 같은 출력을 기대하고 있습니다.

1,abc
2,def
3,xyz

그러나 대신 나는 얻는다 :

id,text
-------
1,abc
2,def
3,xyz
(3 rows)

물론, 사실 이후에 맨 위 두 행과 맨 아래 행을 필터링하는 것이 불가능하지는 않지만 psql만으로 수행하는 방법이 있습니까? 맨 페이지를 읽으면 필드 구분 기호를 제어하는 ​​옵션이 표시되지만 관련없는 출력을 숨기는 옵션은 없습니다.

답변:


100

-t또는 --tuples-only옵션을 사용할 수 있습니다 .

psql --user = myuser -d mydb --output = result.txt -t -c "SELECT * FROM mytable;"

다음 을 추가하기 위해 편집 (1 년 이상 후) :

또한 체크 아웃 할 수 있습니다 명령을 . 더 이상 테스트하기 편리한 PostgreSQL 인스턴스가 없지만 다음 줄을 따라 작성할 수 있다고 생각합니다.COPY

psql --user = myuser -d mydb -c " 'result.txt'DELIMITER ','에 mytable 복사"

( result.txt절대 경로 여야하는 경우를 제외하고 ). 이 COPY명령은 또한보다 지능적인 CSV 형식을 지원합니다. 설명서를 참조하십시오 .


24
당신이 --pset =와 psql의 실행 헤더가 아닌 행 카운트 바닥 글을 원하는 경우 또는, "바닥 글이 꺼 ="
가브리엘 버트

3
COPY실제로 유효한 대안이 될 수 있지만 파일은 psql이 실행되는 시스템이 아니라 서버에 저장됩니다.
fvu

@fvu : 좋은 지적입니다. 나는 보통 실행 psql 그렇게 나에게 그 문제가 아니었다 서버. . .
ruakh

파일이 클라이언트 파일 시스템에서 끝나도록하려면 psql의 \ COPY를 사용하십시오 (예 : COPY 명령 앞에 백 슬래시 추가)
Alex Bitek 2015 년

3
@GabrielBurt 코멘트는 독립형 답변이 될 가치가 있다고 생각합니다. 헤더가 있지만 성가신 " (nnnn rows)"바닥 글 없이 csv를 생성하려고했던 것 입니다.
Pierre D

22

psql 내에서 출력을 리디렉션하고 동일한 옵션을 사용할 수도 있습니다. \ o를 사용하여 출력 파일을 설정하고 \ t를 사용하여 튜플 만 출력합니다 (또는 \pset행 개수 "바닥 글"만 해제).

\o /home/flynn/queryout.txt
\t on
SELECT * FROM a_table;
\t off
\o

또는

\o /home/flynn/queryout.txt
\pset footer off
. . .

3

일반적으로 psql 생성 출력을 구문 분석 하려면 -A-F...

    # generate t.col1, t.col2, t.col3 ...
    while read -r c; do test -z "$c" || echo  , $table_name.$c  | \
       perl -ne 's/\n//gm;print' ; \
       done < <(cat << EOF | PGPASSWORD=${postgres_db_useradmin_pw:-} \
       psql -A -F  -v -q -t -X -w -U \
       ${postgres_db_useradmin:-} --port $postgres_db_port --host $postgres_db_host -d \
       $postgres_db_name -v table_name=${table_name:-}
    SELECT column_name
    FROM information_schema.columns
    WHERE 1=1
    AND table_schema = 'public'
    AND table_name   =:'table_name'  ;
    EOF
    )
    echo -e "\n\n"

여기 에서 전체 bash 호출의 예를 찾을 수 있습니다 .

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