psql – 将命令结果保存到文件中

我使用psql的\dt列出数据库中的所有表。 我需要将结果保存到一个文件。

我确信我以前做过,但不记得语法。

谢谢。

从psql的帮助( \? ):

\ o [文件]将所有查询结果发送到文件或pipe道

命令的顺序如下所示:

 [wist@scifres ~]$ psql db Welcome to psql 8.3.6, the PostgreSQL interactive terminal db=>\o out.txt db=>\dt db=>\q [wist@scifres ~]$ 

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

另一种方法是使用COPY TO命令直接写入服务器上的文件。 这有一个好处,它被倾倒在一个易于parsing的格式,而不是psql的表格格式。 使用COPY FROM将其导入另一个表/数据库也很容易。

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

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

用';'创build一个CSV文件 作为字段分隔符。

一如既往, 请参阅文档以获取详细信息

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

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

上面的命令会将select查询的输出保存为作为csv文件提供的文件名

编辑:

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

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

我假设这里有一些内部的psql命令,但是你也可以从util-linux-ng包运行script命令:

描述脚本在terminal上打印所有内容。

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