0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

はじめての記事投稿

PL/pgSQLのRAISEメッセージをリダイレクトを使用してファイル出力する方法

Last updated at Posted at 2023-07-09

キーワード:PL/pgSQL,RAISE,NOTICE,標準出力,リダイレクトできない

PL/pgSQLのRAISEメッセージは、普通にリダイレクトを使用してもファイルに出力されません。
この問題に対する対処方法を説明します。

1.結論

標準エラー出力を対象にリダイレクトします。

例1:

psql -U postgres -f foo.sql 2> foo.log

例2:

psql -U postgres -f foo.sql > foo.log 2>&1

2.環境

・OS:Windows
・コンソール:コマンドプロンプト
・DB:PostgreSQL 14.7

3.解説

標準出力には以下の2種類があります。
・標準出力(非エラー)
・標準エラー出力

PL/pgSQLのRAISEメッセージは、この内「標準エラー出力」に分類されており、標準出力(非エラー)のリダイレクト対象になりません。

4.実行例

SQLファイル「foo.sql」

SET CLIENT_ENCODING TO 'UTF8';

DO $$
declare
begin
  RAISE NOTICE 'test message.';
end;
$$ language plpgsql;

4.1.標準出力(非エラー)を対象にリダイレクトした場合

コマンド

psql -U postgres -f foo.sql > foo.log

実行結果(コンソール)

RAISEメッセージがリダイレクトされず、コンソールに出力されます。

psql:foo.sql:8: NOTICE:  test message.

実行結果(出力ファイル「foo.log」)

SET実行ログ等がリダイレクトされます。

SET
DO

4.2.標準エラー出力を対象にリダイレクトした場合

コマンド

psql -U postgres -f foo.sql 2> foo.log

実行結果(コンソール)

SET実行ログ等がリダイレクトされず、コンソールに出力されます。

SET
DO

実行結果(出力ファイル「foo.log」)

RAISEメッセージがリダイレクトされます。

psql:foo.sql:8: NOTICE:  test message.

補足

標準出力(非エラー)、標準エラー出力の両方をリダイレクトしたい場合は、以下の方法を取る。

psql -U postgres -f foo.sql > foo.log 2>&1
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?