クエリー結果に基づいてPostgreSQL psql変数を設定
2220 ワード
PostgreSQLのpsqlコマンドラインツールを使用して、オペレータのインタラクションまたはスクリプトを使用してPostgreSQLデータベースとインタラクションを行う場合は、通常、特定のクエリの結果に基づいてpsql変数を設定します.PostgreSQLのプロセス言語PL/pgSQLでは、クエリ結果に基づいてPL/pgSQL変数を設定するSELECT INTOや付与(:=)などの方法がサポートされていますが、psql変数付与ではサポートされていません.
psql変数の付与を行う典型的な方法は、
前述のコード・リストでは、8行目と9行目がこの説明に関連する行(残りの行はプレゼンテーションの設定および取り外しのために使用される)である.8行目にはクエリー(sansセミコロン)が含まれ、
psqlのgsetを使用する場合のその他の注意事項クエリーと
クエリーの後と
文全体の後にセミコロンは使用できませんが、
エラー:
エラー:
これにより、psql開発者は、事前定義されたカラムを
結論
psqlを使用する場合は、
翻訳:https://www.javacodegeeks.com/2015/08/setting-postgresql-psql-variable-based-upon-query-result.html
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