psql: перенаправить сообщение об ошибке sql в файл журнала - PullRequest
0 голосов
/ 10 апреля 2019

Мне нужно выполнить несколько операторов PSQL в блоке, как показано ниже.Здесь я использую «\ o» для перенаправления вывода запроса в «logfile».

Но «\ o» только перенаправляет вывод запроса, в него не входит сообщение об ошибке, если произошла какая-либо ошибка.

Например: если я введу неверное имя db_name, на экране появится сообщение об ошибке «ОШИБКА: имя_базы_данных не существует».Но эта ошибка не сохраняется в данном лог-файле.

Есть ли способ сохранить ошибки в том же лог-файле, где сохраняется другой вывод.

psql -p 5432 -U postgres -h ${db_host} << eof1
\set ON_ERROR_STOP TRUE
\o | cat >> ${logfile}
\l+ db_name;
select pg_database_size('db_name');
\o
eof1

1 Ответ

0 голосов
/ 26 апреля 2019

Перенаправить STDERR в файл:

$ psql 2> errors.txt
Expanded display is used automatically.
Null display is "¤".
psql (10.5)
Type "help" for help.

db=# select 1;
 ?column?
----------
        1
(1 row)

db=# select 1 + 'foo';
db=# \q

$ cat errors.txt
ERROR:  invalid input syntax for integer: "foo"
LINE 1: select 1 + 'foo';
                   ^

Вы также можете указать выходной файл при вызове psql вместо использования \o:

$ psql -o out.txt 2> errors.txt
Expanded display is used automatically.
Null display is "¤".
psql (10.5)
Type "help" for help.

db=# select 1;
db=# select 1 + 'foo';
db=# \q

$ cat out.txt
 ?column?
----------
        1
(1 row)

$ cat errors.txt
ERROR:  invalid input syntax for integer: "foo"
LINE 1: select 1 + 'foo';
                   ^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...