Obawiam się, że nie spodoba ci się ta odpowiedź, ale obecnie wydaje się to niemożliwe. Z dokumentacji psql :
Zapisuje przyszłe wyniki zapytania do nazwy pliku lub potoków przyszłych wyników w osobnej powłoce uniksowej w celu wykonania polecenia. Jeśli nie podano żadnych argumentów, dane wyjściowe zapytania zostaną zresetowane do standardowego wyniku.
„Wyniki zapytania” obejmują wszystkie tabele, odpowiedzi na polecenia i powiadomienia otrzymane z serwera bazy danych, a także dane wyjściowe różnych poleceń odwrotnego ukośnika, które przeszukują bazę danych (takich jak \ d), ale nie komunikaty o błędach.
Jak zauważyłeś, nie ma możliwości przekierowania komunikatów o błędach podczas korzystania psql
interaktywnego.
(Bawiłem się z wszelkiego rodzaju przekierowaniami od \ o do bezskuteczności. Wygląda na to, że kanał wyjściowy zapytania różni się od tego, w którym pojawiają się komunikaty o błędach - a nawet błędy z serwera i zgłaszane w twoich procedurach działają na różne sposoby .
test=# SHOW client_min_messages;
client_min_messages
---------------------
notice
-- added the above to show it's not a config problem
CREATE FUNCTION raise_test() RETURNS integer AS
$body$
BEGIN
RAISE NOTICE 'notice';
RETURN 1;
END;
$body$
LANGUAGE plpgsql;
test=# \o | cat > out.sql
test=# SELECT raise_test(); -- you could put this in a file and call \i your_file, it's just the same
NOTICE: notice
test=# \o | cat > out.sql 2>&1
test=# SELECT raise_test();
NOTICE: notice
out.sql zawiera
raise_test
------------
1
(1 row)
w obu przypadkach. Dlatego nie mam pojęcia, jakiego deskryptora kanału / pliku używa się do wyprowadzania komunikatów wywołanych przez procedurę.))
(Istnieje wątek na temat hakerów PostgreSQL, który może rzucić nieco światła na ten problem: http://postgresql.1045698.n5.nabble.com/psql-output-locations-td5068313.html )
Co można zrobić, to być może wychodząc psql
jak
psql test >/tmp/psql.out 2>&1
a to przekieruje wszystkie dane wyjściowe do określonego pliku. Jedyny problem z tym, że nie masz nawet monitu i tracisz możliwości edycji wiersza poleceń.