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

pst*_*ton 250 postgresql psql

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

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

jhw*_*ist 428

从psql的help(\?):

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

命令序列如下所示:

[wist@scifres ~]$ psql db
Welcome to psql 8.3.6, the PostgreSQL interactive terminal

db=>\o out.txt
db=>\dt
db=>\q
Run Code Online (Sandbox Code Playgroud)

  • 键入`\ o`再次将其关闭. (90认同)
  • 我是在 \dt 之前调用它,还是结合使用?请包括语法谢谢。 (2认同)
  • 可悲的是,`\?`的输出没有进入文件.:( (2认同)

int*_*tgr 88

\ojhwist已经描述了psql 命令.

另一种方法是使用该COPY TO命令直接写入服务器上的文件.这样做的好处是它以您选择的易于解析的格式转储 - 而不是psql的列表格式.使用也很容易导入到另一个表/数据库COPY FROM.

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

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

使用';'创建CSV文件 作为字段分隔符.

与往常一样,请参阅文档以获取详细信息


小智 21

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

\copy (select * from tempTable limit 100) to 'filenameinquotes' with header delimiter as ','
Run Code Online (Sandbox Code Playgroud)

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

编辑:

对于我的psql服务器,以下命令有效,这是旧版本的v8.5

copy (select * from table1) to 'full_path_filename' csv header;
Run Code Online (Sandbox Code Playgroud)


Yav*_*vuz 20

使用 pgsql 命令的 o 参数。

-o, --output=FILENAME 将查询结果发送到文件(或 |管道)

psql -d DatabaseName -U UserName -c "SELECT * FROM TABLE" -o /root/Desktop/file.txt
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,正在寻找可以从 CL 发送的版本。 (2认同)
  • 这是我认为最好的答案 (2认同)

小智 10

使用以下查询将结果存储在 CSV 文件中

\copy (your query) to 'file path' csv header;
Run Code Online (Sandbox Code Playgroud)

例子

\copy (select name,date_order from purchase_order) to '/home/ankit/Desktop/result.csv' cvs header;
Run Code Online (Sandbox Code Playgroud)

希望这对你有帮助。


Dan*_*kin 7

如果您遇到以下错误

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.
Run Code Online (Sandbox Code Playgroud)

你可以这样运行它:

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