web-dev-qa-db-ja.com

psqlのset、\ set、\ psetの違い

psqlを使用するときと\setを使用するときと\psetを使用するときの間で、setを操作するときに少し混乱することがあります。私はそれを思う:

  • setは、データベースへの接続のセッション変数用です。例:SET ROLE dba;
  • \setは、このpsqlセッションのローカル変数用です。例:\set time 'select current_timestamp'
  • \psetは、このpsqlセッションのpsql設定用です。例:'\pset border 2'

しかし、私が思ったことがそれぞれの良い説明であるとは思っていませんでした。上記の私の仮定は正しいですか?

PostgreSQL9.4を使用しています

12
David S

基本的に正しい。重要な違いは、SETがSQLコマンドであるのに対し、他の2つはpsqlメタコマンドであるということです-接頭辞\で示されます。

  • SET は、実行時パラメータを変更するためのSQLコマンドです。これはサーバー上で実行され、psql自体とは何の関係もありません。

  • \setはpsqlメタコマンドであり、 ドキュメントごとに

    Psql変数名を値に設定します[...]

    注:このコマンドは、SQLコマンドSETとは関係ありません。

  • \psetは別のpsqlメタコマンドです。 ドキュメントごと

    このコマンドは、クエリ結果テーブルの出力に影響を与えるオプションを設定します

11