在最近的博客文章SPOOLing pQuery with psql中的结果中 ,我简要地介绍了一些PostgreSQL数据库psql 元命令和选项 ,这些命令和选项可用于模拟Oracle数据库的SQL * Plus 假脱机行为。 在\qecho
文章中,我写道:“我无法找到一种方法,无需使用\qecho
即可将查询及其结果写入文件。” 幸运的是,自从撰写本文以来,一位同事将我指向了psql选项--log-file
(或-L
)。
PostgreSQL psql文档指出--log-file
/ -L
选项“除了正常的输出目标外,还将所有查询输出写入文件filename中”。 这个方便的选项将查询及其非错误结果都打印到指定的文件中。 例如,如果我使用命令“ psql -U postgres -LC:\output\albums.txt
”启动psql
,然后运行查询, select * from albums;
,生成的文件C:\output\albums.txt
如下所示:
********* QUERY **********
select * from albums;
**************************
title | artist | year
---------------------------+-----------------+------
Back in Black | AC/DC | 1980
Slippery When Wet | Bon Jovi | 1986
Third Stage | Boston | 1986
Hysteria | Def Leppard | 1987
Some Great Reward | Depeche Mode | 1984
Violator | Depeche Mode | 1990
Brothers in Arms | Dire Straits | 1985
Rio | Duran Duran | 1982
Hotel California | Eagles | 1976
Rumours | Fleetwood Mac | 1977
Kick | INXS | 1987
Appetite for Destruction | Guns N' Roses | 1987
Thriller | Michael Jackson | 1982
Welcome to the Real World | Mr. Mister | 1985
Never Mind | Nirvana | 1991
Please | Pet Shop Boys | 1986
The Dark Side of the Moon | Pink Floyd | 1973
Look Sharp! | Roxette | 1988
Songs from the Big Chair | Tears for Fears | 1985
Synchronicity | The Police | 1983
Into the Gap | Thompson Twins | 1984
The Joshua Tree | U2 | 1987
1984 | Van Halen | 1984
(23 rows)
使用-L
时的一个缺点是,任何错误消息都不会写入查询和成功结果写入的文件中。 下一个屏幕快照演示了由于从列名而不是表名进行查询而导致的错误,并且屏幕快照显示了输出文件中出现的内容之后的清单。
********* QUERY **********
select * from artist;
**************************
使用psql
的-L
选项生成的输出文件显示了错误的查询,但是生成的文件不包含psql
终端应用程序中显示的错误消息(“错误:关系“艺术家”不存在”)。 我不知道有什么方法可以轻松地确保将此错误消息写入查询所写入的同一文件。 可能会重定向标准输出和标准错误 ,但是我需要根据-L
选项提供的文件-L
错误消息重定向到与正在将查询和输出写入的文件不同的文件。
翻译自: https://www.javacodegeeks.com/2016/09/spooling-queries-results-psql-2.html