2011-03-16 46 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

相关问题