SQL * Plus , инструмент командной строки базы данных Oracle , предоставляет команду SPOOL для «сохранения результатов запроса в файле». На следующем снимке экрана показан SPOOL, используемый в SQL * Plus для буферизации списка пользовательских таблиц в файл с именем C:\pdf\output.txt .
И выполненный запрос, и результаты запроса были output.txt в файл output.txt как показано в следующем листинге этого файла.
SPOOL вывод файла Oracle * Plus в SPOOL SPOOL
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
SQL> select table_name from user_tables;TABLE_NAME ------------------------------ REGIONS LOCATIONS DEPARTMENTS JOBS EMPLOYEES JOB_HISTORY PEOPLE NUMERAL NUMBER_EXAMPLE COUNTRIES 10 rows selected.SQL> spool off |
Инструмент командной строки PostgreSQL , psql , обеспечивает функциональность, аналогичную SPOOL в SQL * Plus, с мета-командой \ o ( \ out ). Следующий снимок экрана показывает это в действии в psql .
Файл output.txt записанный с помощью output.txt \o psql ‘, показан в следующем листинге.
|
1
2
3
4
5
|
List of relations Schema | Name | Type | Owner --------+--------+-------+---------- public | albums | table | postgres(1 row) |
Только сгенерированные в psql результаты запроса содержатся в сгенерированном файле output.txt . Сам запрос, даже более длинный запрос, созданный с помощью \set ECHO_HIDDEN on , не содержится в выводе.
Один из подходов к обеспечению того, чтобы сам запрос выводился с записью результатов запроса в файл, — это использование \qecho для явной записи запроса в буферный файл перед выполнением запроса. Это продемонстрировано на следующем снимке экрана.
Использование \qecho вместе с \o помещает сам запрос в записанный файл с результатами запроса, как показано в следующем списке результатов.
|
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
|
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) |
Основным недостатком использования \qecho является то, что он должен использоваться перед \qecho каждого оператора в выходной файл.
Переменная psql ECHO может быть настроена на queries чтобы «все команды SQL отправлялись на сервер [отправлялись] также на стандартный вывод». Это продемонстрировано на следующем снимке экрана.
К сожалению, хотя установка переменной psql ECHO для queries приводит к выводу запроса вместе с результатами в окне psql , запрос не записывается в файл с помощью \o . Вместо этого, когда \o используется с ECHO установленным на queries , сам запрос снова распечатывается в окне, а результаты записываются только в указанный файл. Это связано с тем, что, как указано в документации (я добавил акцент ), \o записывает « вывод запроса… в стандартный вывод». Это продемонстрировано на следующем снимке экрана.
Я не смог найти способ легко использовать команду метаданных \o и записать запрос и результаты в файл, не используя \qecho . Тем не менее, другой подход, который не требует \qecho состоит в том, чтобы запустить не пытаться \qecho вывод файла изнутри psql интерактивном режиме, а вместо этого выполнить внешний входной файл сценария SQL.
Например, если я сделаю входной файл с именем input.sql который состоит только из одной строки с запросом
select * from albums;
Я мог бежать
psql с командой
psql -U postgres --echo-queries < input.txt > outputWithQuery.txt для чтения этого однострочного файла с запросом и записи выходных данных в файл outputWithQuery.txt . Опция --echo-queries работает как --echo-queries \set ECHO queries из psql и при выполнении этой команды успешно генерируется заданный выходной файл с запросом и результатами. Следующий снимок экрана и следующий список кода демонстрируют это.
outputWithQuery.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
|
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) |
Я не знаю, как точно имитировать написание SQL * Plus запроса с его результатами из SQL * Plus в psql не добавляя \qecho , но передавая входной скрипт в psql с помощью --echo-queries Опция работает очень похоже на вызов и буферизацию скрипта из SQL * Plus.
| Ссылка: | SPOOLing Запросы с результатами в psql от нашего партнера JCG Дастина Маркса в блоге Inspired by Actual Events . |





