2011-03-16 5 views
161

psql의 \dt을 사용하여 데이터베이스의 모든 테이블을 나열하고 있습니다. 결과를 파일에 저장해야합니다.psql - 명령 결과를 파일에 저장하십시오.

이전에 해본 적이 있지만 구문을 기억할 수는 없습니다.

감사합니다.

+0

http://stackoverflow.com/questio ns/3939329/put-output-from-postgres-i-input-to-a-file. –

답변

277

에서 psql의의 도움 (\?) :

\ O [FILE] 파일 또는 모든 쿼리 결과를 보내 | 명령의 순서는 다음과 같이됩니다

파이프 :

[[email protected] ~]$ psql db 
Welcome to psql 8.3.6, the PostgreSQL interactive terminal 

db=>\o out.txt 
db=>\dt 
db=>\q 

[[email protected] ~]$ 
에게
+1

\ dt보다 먼저 호출하거나 조합하여 호출합니까? 구문 감사를 포함하십시오. – pstanton

+52

'\ o'를 다시 입력하면 다시 꺼집니다. –

+2

슬프게도,'\?'의 출력은 파일에 가지 않습니다. : – blitzen9872

1

내부 psql 명령이 있다고 가정하지만에서 script 명령을 실행할 수도 있습니다.210 패키지 :

설명 스크립트는 터미널에 인쇄 된 모든 것을 타이프 크립트합니다.

65

psql \o 명령은 이미 jhwist에서 설명했습니다.

대체 방법은 COPY TO 명령을 사용하여 서버의 파일에 직접 쓸 수 있습니다. 이것은 psql의 표 형식이 아닌, 당신이 선택한 쉬운 형식으로 덤프 될 수 있다는 장점이 있습니다. COPY FROM을 사용하여 다른 테이블/데이터베이스로 가져 오는 것도 매우 쉽습니다.

NB! 이를 위해서는 수퍼 유저 권한이 필요하며 서버의 파일 에 쓸 것입니다.

예 : COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';')

가 함께 CSV 파일을 작성 ';' 필드 구분자로.

언제나

, 포스트 그레스 명령이 사용자에 대해 작업 할 수 있습니다 see the documentation for details

+2

복사 '\ dt'와 함께 작동하지 않습니다 – pstanton

+0

와우, 좋은 접근 실제로 – helvete

10

\copy. 그것은 \ DT는 작동 여부,하지만 일반 구문은 다음 링크에서 재생되는 경우 몰라 Postgres SQL copy syntax

\copy (select * from tempTable limit 100) copy to 'filenameinquotes' with header delimiter as ',' 

위의 CSV 파일로 제공되는 파일 이름에서 선택 쿼리의 출력을 저장합니다

편집 :

내 psql 서버의 경우 다음 명령이 작동합니다. 이것은 구버전 버전 v8입니다.

: 당신은 당신이이 방법으로 실행할 수 있습니다 ufgtoolspg=> COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';') ; ERROR: must be superuser to COPY to or from a file HINT: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.

다음과 같은 오류를 가지고있는 경우 5

copy (select * from table1) to 'full_path_filename' csv header; 
+0

매우 편리합니다, 감사합니다. .copy to ... '가 필요하지 않습니다. - 실제로 최신 버전에서는 명령이 실패하게됩니다. – Tom

+0

Tom, 필자는 설치가 잘못되었다고 생각합니다. 설치 프로그램에서 작동하는 게시물을 편집했습니다. pgsql 8.5ver –

0

COPY tablename TO '/tmp/output.csv' DELIMITER ',' CSV HEADER; 이 명령은 CSV

1

로 전체 테이블을 저장하는 데 사용됩니다 psql somepsqllink_or_credentials -c "COPY (SELECT foo, bar FROM baz) TO STDOUT (format csv, delimiter ';')" > baz.csv

관련 문제