3
3

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 5 years have passed since last update.

PostgreSQL 9.6 psqlの動作の非互換

Posted at

PostgreSQL 9.6 psqlの非互換

PostgreSQL 9.6がリリースされてから2ヶ月以上経ちました。9.6でpsqlの動作が変わる変更が入っていることにお気づきでしょうか?

PostgreSQL 9.6のリリースノートにpsqlの変更点として以下のように書いてあります。

psqlの-cオプションはもはや--no-psqlrcの意味を含まなくなりました。

古い動作を得るには--no-psqlrc(または短縮形の-X)を明示的に書いてください。
 このように修正されたスクリプトは古いバージョンのpsqlでも引き続き動作するでしょう。

な、なんだってー

つまり、今まで psql -c "SELECT * FROM hogehoge;" と書いていたコマンドがpsqlrcファイルによって動作が変わってしまいます。
シェルスクリプトなんかで使用する時は-Xを入れておく方が良いでしょう。

まあ、psqlrcを読んでもそれほど影響無いかな...と思っていると、元々あった動作と組み合わさって以外な動作をすることになります。

例えば ~/.psqlrc に以下の文を入れていたりすると

\pset format wrapped
psql -Pformat=asciidoc -c "select *from test;" testdb

とasciidoc形式で出力しようとしても出力されません。

オプションの方が優先でない???

そーなんです。ずっと前のバージョンからpsqlはpsqlrcの方がオプションの後で解釈されるようになっていてオプションより優先されるようになっちゃっているのです。

-Xを付けるか、他のpsqlrcの内容を活かしつつ上記の変更をしたい場合、以下のようにすると出力されます。

psql -c "\pset format asciidoc" -c "select *from test;" testdb

そうなっちゃってるのはしょうがないので、とりあえず注意しましょう!

3
3
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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?