2011-03-16 48 views
161

我使用psql的\dt來列出數據庫中的所有表。我需要將結果保存到文件中。psql - 將命令結果保存到文件

我確定我以前做過,但不記得語法。

謝謝。

+0

參見http://stackoverflow.com/questio NS/3939329 /外放輸出從 - postgres的-i的輸入到一個文件。 – 2011-03-16 21:06:13

回答

277

從psql的幫助(\?):

\ o [文件]將所有查詢結果以文件或|管

命令的順序將是這樣的:

[[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 2011-03-16 20:59:55

+52

再次輸入'\ o'將其關閉。 – 2015-10-28 22:17:09

+2

不幸的是,'\?'的輸出沒有進入文件。 :( – blitzen9872 2017-02-10 18:47:25

1

我認爲這裏面存在一些內部的psql命令,但是您也可以從運行script命令210包:

說明 腳本使一切印刷在終端上的一個打字稿。

65

psql \o命令已由jhwist描述。

另一種方法是使用COPY TO命令直接寫入服務器上的文件。這有一個好處,它傾倒在一個你選擇的易於解析的格式 - 而不是psql的表格格式。使用COPY FROM導入另一個表/數據庫也很容易。

注意!這需要超級用戶權限並將寫入服務器上的文件

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

創建具有CSV文件 ';'作爲字段分隔符。

與往常一樣,see the documentation for details

+2

複製到'\ dt' – pstanton 2011-03-17 00:22:52

+0

哇,不錯的方法確實 – helvete 2017-09-06 14:23:53

10

\copy這是Postgres命令可以針對任何用戶工作。不知道它是否適合\ DT或沒有,但一般語法從以下鏈接複製Postgres SQL copy syntax

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

以上將保存選擇查詢的輸出爲CSV文件中提供的文件名

編輯:

對於我的psql服務器下面的命令工作這是一箇舊版本v8。5

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

非常方便,謝謝。 。複製到...'不是必需的 - 事實上,在最近的版本中,它會導致命令失敗。 – Tom 2016-07-21 14:24:01

+0

Tom,我認爲這是一個錯字。用我的安裝pgsql 8.5ver編輯帖子 – 2016-07-23 12:12:22

0

COPY tablename TO '/tmp/output.csv' DELIMITER ',' CSV HEADER; 可以使用此命令對整個表保存爲csv

1

如果你有以下錯誤 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.

你可以用這種方式運行:

psql somepsqllink_or_credentials -c "COPY (SELECT foo, bar FROM baz) TO STDOUT (format csv, delimiter ';')" > baz.csv

相關問題