이 답변이 마음에 들지 않아서 현재는 불가능합니다. 로부터 psql의 문서 :
향후 쿼리 결과를 파일 파일 이름으로 저장하거나 향후 결과를 별도의 Unix 쉘로 파이프하여 명령을 실행합니다. 인수를 지정하지 않으면 조회 출력이 표준 출력으로 재설정됩니다.
"쿼리 결과"에는 모든 테이블, 명령 응답 및 데이터베이스 서버에서 얻은 알림뿐만 아니라 데이터베이스를 쿼리하는 다양한 백 슬래시 명령 (예 : \ d)의 출력이 포함되지만 오류 메시지는 포함되지 않습니다.
알다시피 psql
대화식으로 사용할 때 오류 메시지를 리디렉션 할 방법이 없습니다 .
(나는 \ o에서 아무 소용이없는 모든 종류의 리디렉션으로 놀아 왔습니다. 쿼리 출력 채널은 오류 메시지를 얻는 것과 다릅니다. 심지어 서버에서 오류가 발생하여 절차에서 발생했습니다. .
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 포함
raise_test
------------
1
(1 row)
두 경우 모두. 이것이 절차에서 발생하는 메시지를 출력하는 데 사용되는 채널 / 파일 디스크립터에 대한 실마리가없는 이유입니다.))
(PostgreSQL 해커에는이 문제에 대해 약간의 설명이있는 스레드가 있습니다 : http://postgresql.1045698.n5.nabble.com/psql-output-locations-td5068313.html )
어떤 일이 가능하게 할 수있는 것은 시작 psql
처럼
psql test >/tmp/psql.out 2>&1
그러면 모든 출력이 지정된 파일로 리디렉션됩니다. 이것에 대한 유일한 문제는 프롬프트조차없고 명령 줄 편집 기능을 잃어 버리는 것입니다.