关于postgresql:psql – 将命令结果保存到文件中

psql - save results of command to a file

我正在使用psql的\dt列出数据库中的所有表,我需要保存结果。

将psql命令的结果导出到文件的语法是什么?


在psql的帮助下(\?

\o [FILE] send all query results to file or |pipe

命令序列如下:

1
2
3
4
5
6
7
8
[wist@scifres ~]$ psql db
Welcome TO psql 8.3.6, the PostgreSQL interactive terminal

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

[wist@scifres ~]$


jhwist已经描述了psql \o命令。

另一种方法是使用COPY TO命令直接写入服务器上的文件。这样做的好处是,它被丢弃在一个易于解析的格式中,而不是psql的表格格式中。使用COPY FROM也很容易导入到另一个表/数据库。

NB!这需要超级用户权限,并将写入服务器上的文件。

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

创建一个以";"作为字段分隔符的csv文件。

与往常一样,有关详细信息,请参阅文档


作为postgres命令的\copy可以为任何用户工作。不知道它是否适用于dt,但是从下面的链接postgres sql copy语法中复制了一般语法

1
\copy (SELECT * FROM tempTable LIMIT 100) TO 'filenameinquotes' WITH header delimiter AS ','

上面将选择查询的输出保存在提供的文件名中,作为csv文件。

编辑:

对于我的psql服务器,以下命令起作用这是一个旧版本的V8.5

1
copy (SELECT * FROM table1) TO 'full_path_filename' csv header;


如果出现以下错误
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


COPY tablename TO '/tmp/output.csv' DELIMITER ',' CSV HEADER;此命令用于将整个表存储为csv


我假设存在一些内部psql命令,但是您也可以从utillinux ng包运行script命令:

DESCRIPTION
Script makes a typescript of everything printed on your terminal.