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만으로 수행하는 방법이 있습니까? 맨 페이지를 읽으면 필드 구분 기호를 제어하는 옵션이 표시되지만 관련없는 출력을 숨기는 옵션은 없습니다.
답변
-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 형식을 지원합니다. 설명서를 참조하십시오 .
답변
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
. . .
답변
일반적으로 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"