クエリー結果に基づいてPostgreSQL psql変数を設定

2220 ワード

PostgreSQLのpsqlコマンドラインツールを使用して、オペレータのインタラクションまたはスクリプトを使用してPostgreSQLデータベースとインタラクションを行う場合は、通常、特定のクエリの結果に基づいてpsql変数を設定します.PostgreSQLのプロセス言語PL/pgSQLでは、クエリ結果に基づいてPL/pgSQL変数を設定するSELECT INTOや付与(:=)などの方法がサポートされていますが、psql変数付与ではサポートされていません.
psql変数の付与を行う典型的な方法は、\setを使用することである.これにより、psql変数を文字値に設定できます.ただし、クエリの結果に基づいてpsql変数を設定する場合があります.これはpsqlの\gsetオプションで完了します.psqlの\set操作で明示的に指定する名前を持つ変数を明示的に指定する文字値に設定するのとは異なり、\gset psql変数は暗黙的にクエリから返されるカラム名として命名されます(別名がカラムの場合は別名が使用されます).\gsetは、クエリの後に指定され(クエリには通常セミコロンがありません)、\gset文の後にセミコロンがありません(\gset文の後にセミコロンが配置されないように).\setがコード例とともにどのように動作するかをより容易に見ることができる.次のコード・リストには、\gsetを使用して「name」という名前のpsql変数が設定された小さなpsqlファイルが表示されます.この変数はクエリーによって設定され、psqlのコロン接頭辞表現で表示され、その値が「表示」されます.
CREATE TABLE person
(
   name text
);

INSERT INTO person (name) VALUES ('Dustin');

SELECT name FROM person \gset
\echo :name

DROP TABLE person;

前述のコード・リストでは、8行目と9行目がこの説明に関連する行(残りの行はプレゼンテーションの設定および取り外しのために使用される)である.8行目にはクエリー(sansセミコロン)が含まれ、\gsetに続く.psql変数「name」は9行目の値で表され、設定される.psqlターミナル・ウィンドウには、この機能の出力が以下のように表示される.
CREATE TABLE
INSERT 0 1
Dustin
DROP TABLE

psqlのgsetを使用する場合のその他の注意事項
  • クエリーと\gsetの間にセミコロンを配置すると、出力に影響します.
    クエリーの後と\gsetの前にセミコロンを配置すると、クエリーが実行され、クエリーの結果が表示され、変数が設定されます.
  • 文全体の後にセミコロンは使用できませんが、\gset以降にセミコロンを配置すると変数の設定が混乱します.
    エラー:\gset
  • invalid command \gset;によって変数を設定するクエリは、1行を適切に返す必要があります.
    エラー:\gset
  • more than one row returned for \gsetに関連付けられたクエリのSELECT句の列が別名になっている場合、実際には2つのpsql変数名が返された値にアクセスできます.カラム名と別名です.
    これにより、psql開発者は、事前定義されたカラムを\gsetに設定された変数に対して所望の任意の名前として別名化することができる.

  • 結論
    psqlを使用する場合は、\gsetを使用してpsql変数を明示的に設定します.その名前は最初のパラメータによって提供され、2番目のパラメータは関連値を提供します.クエリーの結果に基づいてpsql変数を設定するには、クエリーの後に\set variable_name variable_value(通常はセミコロンを使用しない)を追加し、戻り値にカラム名(またはカラムの別名)でアクセスします.
    翻訳:https://www.javacodegeeks.com/2015/08/setting-postgresql-psql-variable-based-upon-query-result.html