В недавнем сообщении блога « Запросы SPOOLing с результатами в psql» я кратко рассмотрел некоторые метакоманды и параметры psql базы данных PostgreSQL, которые можно использовать для эмуляции поведения спулинга SQL * Plus базы данных Oracle . В этом посте я написал: «Мне не удалось найти способ … записать запрос и его результаты в файл без необходимости использовать \qecho
». К счастью, после написания этой статьи коллега указал мне на параметр psql --log-file
(или -L
).
В документации PostgreSQL psql говорится, что опция --log-file
/ -L
«записывает [s] весь вывод запроса в имя файла , в дополнение к обычному месту назначения вывода». Этот удобный одиночный параметр выводит как запрос, так и результаты, не связанные с ошибками, в указанный файл. Например, если я запускаю psql
с помощью команды « psql -U postgres -LC:\output\albums.txt
», а затем запускаю запрос select * from albums;
psql -U postgres -LC:\output\albums.txt
select * from albums;
сгенерированный файл C:\output\albums.txt
выглядит так:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
********* 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
состоит в том, что любые сообщения об ошибках не записываются в файл, в который записываются запросы и успешные результаты. Следующий снимок экрана демонстрирует ошибку, вызванную запросом по имени столбца, а не по имени таблицы, а список после снимка экрана показывает, что отображается в выходном файле.
1
2
3
|
********* QUERY ********** select * from artist; ************************** |
Выходной файл, сгенерированный с помощью опции -L
psql
показывает неверный запрос, но сгенерированный файл не содержит сообщения об ошибке, которое было показано в терминальном приложении psql
(«ОШИБКА: отношение« исполнитель »не существует»). Я не знаю ни одного способа легко гарантировать, что это сообщение об ошибке будет записано в тот же файл, в который записан запрос. Перенаправление стандартного вывода и стандартной ошибки возможно, но тогда мне нужно будет перенаправить сообщения об ошибках в файл, отличный от файла, в который записываются запрос и вывод, на основе имени файла, указанного в опции -L
.
Ссылка: | Больше о запросах и результатах буферизации в psql от нашего партнера JCG Дастина Маркса в блоге Inspired by Actual Events . |