LoginSignup
2
0

More than 1 year has passed since last update.

PG15/PG16:Fix overwrite of successive result sets with psql's <query> \g fname

Last updated at Posted at 2022-12-15

はじめに

にゃーん。趣味でポスグレをやっている者だ。

この記事はPostgreSQL 16 全部ぬこ Advent Calendar 2022 16日目の記事です。
今回はpsqlメタコマンドのbug-fixについて書きます。

概要

項目 内容
タイトル Fix overwrite of successive result sets with psql's \g fname
Topic Bug Fixes
ステータス commited
Last Modified 2022-10-03
概要 psqlで複数SQL記述直後の\gメタコマンドの挙動改善

変更内容

全部ぬこアドベントカレンダー13日目の記事でも、psql\gメタコマンド(直前のコマンドを繰り返し実行する)について書きましたが、PostgreSQL 15/16ではそれとは別に、バグフィックスっぽい改善も入っています。

どんなバグなのか

簡単に言うと、psql上で複数ステートメントを1ラインで実行した直後、\g fileを実行したときに、最後に実行されたコマンドの結果しか書き込まれない、という問題のようです。

なお、この問題は、PostgreSQL 15.0では既に改善されています。

PostgreSQL 15(たぶんbeta4まで)での挙動

=# select 1\; select 2;
 ?column?
----------
        1
(1 row)

 ?column?
----------
        2
(1 row)

=# select 1\; select 2 \g file
=# \q
$

psqlを終了して、fileの内容を確認します。

$ cat file
 ?column?
----------
        2
(1 row)

$

最後に実行されたSELECT 2の結果しか書き出されていませんね。

PostgreSQL 15.0/PostgreSQL 16での挙動

=# select 1\; select 2;
 ?column?
----------
        1
(1 row)

 ?column?
----------
        2
(1 row)

=# select 1\; select 2 \g file
=# \q
$

psqlを終了して、fileの内容を確認します。

$ cat file
 ?column?
----------
        1
(1 row)

 ?column?
----------
        2
(1 row)

$

全てのコマンドの結果がfileに書き込まれています。これがあるべき動作ということですね。

おわりに

今回はPostgreSQL 15開発中にFixされた、PostgreSQL 15/16に反映された、psqlの新機能について書きました。
\g file指定自体、この調べ物をしていて初めて知った・・・psqlなんもわからん。

2
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
2
0