Using the Query tool
====================

PEMには、Postgresサーバーに対してアドホックSQLクエリを発行できる機能が豊富なインタラクティブ開発環境IDEが含まれています。

クエリツールには、 **ツール> クエリツール**
を選択するか、ブラウザツリーの選択したノードのコンテキストメニューからアクセスできます。クエリツールを使用すると、次のことができます。

- アドホックSQLクエリーを発行します。

- 任意のSQLコマンドを実行します。

- SELECTクエリーの結果セットが :ref:`[データ出力]タブ <[データ出力]タブ>` の場合、編集します。

- 現在の接続とトランザクションステータスを構成および表示します。

- 出力パネルに表示されているデータをCSVファイルに保存します。

- テキスト、グラフィカル、またはテーブル形式< https://explain.depesz.com
  >と同様に、 SQLステートメントの実行プランを確認します。

- SQLステートメントに関する分析情報を表示します。

クエリツールには、2つのパネルがあります。

- 上部パネルにはSQLエディターが表示されます。パネルを使用して、クエリーを入力、編集、または実行できます。また、
  **History**
  タブも表示され、セッションで実行されたクエリを表示するために使用できます。編集中にスクラッチパッドを使用して、テキストのスニペットを保持できます。閉じたスクラッチパッドを再度開くか、新しいスクラッチパッドを開くには、
  SQLエディターを右クリックし、 **Add Panel**
  を選択します。同じテクニックを使用して、他のパネルから新しいスクラッチパッドを開くこともできます。

- 下部のパネルには、[ Data Output
  ]パネルが表示されます。タブ付きパネルには以下が表示されます。

  - クエリーによって返された結果セット
  - クエリーの実行に関する情報 plandb_tran_5
    クエリーの実行に関連するサーバーメッセージ
  - サーバーから受信した非同期通知。

クエリツールツールバー
----------------------

ツールバーには、状況依存のアイコンが使用されており、頻繁に実行されるタスクへのショートカットを提供します。

.. csv-table::
  :header: Icon,Behavior,Shortcut
  :widths: 12,25,15
  :align: left
  :class: longtable

  Open File,以前に保存したクエリーをSQLエディターに表示します。,Accesskey + O
  Save,クエリーを保存するか、 **Save** メニューにアクセスします。-  **Save** を選択して、 SQLエディターパネルで選択したコンテンツをファイルに保存します。 -  **Save As** を選択して、新しいブラウザーダイアログボックスを開き、 SQLエディターパネルで選択したコンテンツを保存する新しい場所を指定します。,Accesskey + S
  Save Data Changes,データ出力パネルのデータの変更挿入、更新、または削除をサーバーに保存します。,F6
  Find,SQLエディターに表示されるコードを検索、置換、または移動します。-  **Find** を選択して検索ターゲットを提供し、 SQLエディターのコンテンツを検索します。 -  **Find next** を選択して、次に出現する検索ターゲットを見つけます。 -  **以前の検索** を選択して、検索ターゲットの最後に出現した場所に移動します。 -  **Pesistent find** を選択して、エディターで検索ターゲットのすべてのオカレンスを識別します。 -  **Replace** を選択して、ターゲットの個々のオカレンスを見つけて置換しますプロンプトを表示します。 -  **Replace all** を選択して、エディターでターゲットのすべてのオカレンスを見つけて置換します。 -  **Jump** を選択して、次の検索ターゲットに移動します。,Cmd+F Cmd+G Cmd+Shift+G Cmd+Shift+F Alt+G
  Copy,表示/編集データモードのときに、[データ出力]パネルで現在強調表示されているコンテンツをコピーします。,Accesskey + C
  Paste,表示/編集データモードで、コピーした行を新しい行に貼り付けます。,Accesskey + P
  Delete,選択した行を削除対象としてマークします。  **Save Data Changes** を選択して、削除したコンテンツを更新します。,Accesskey + D
  Edit,**Edit** メニューのオプションを使用して、テキスト編集ツールにアクセスします。オプションは、クエリツールモードのときにSQLエディタパネルに表示されるテキストに動作します。-現在選択しているテキストをインデントするには、  **Indent Selection** を選択します。 - 現在選択しているテキストからインデントを削除するには、  **Unindent Selection** を選択します。 -  **Inline Comment Selection** を選択して、 SQLスタイルのコメント表記での選択を含む行を囲みます。 -  **Inline Uncomment Selection** を選択して、選択した行からSQLスタイルのコメント表記を削除します。 -  **Block Comment** を選択して、Cスタイルのコメント表記で選択を含むすべての行を囲みます。このオプションはトグルとして機能します。,Tab Shift+Tab Cmd+/ Cmd+. Shift+Cmd+/
  Filter,データの表示/編集モードでデータのフィルタリングと並べ替え基準を設定します。下矢印を選択して、他のフィルタリングと並べ替えオプションにアクセスします。- **Sort/Filter** を選択して、並べ替えとフィルタリングダイアログボックスを開きます。  - 選択したセルの値を含む行のみを表示するには、  **Filter by Selection** を選択します。 - 選択したセルの値を含まない行のみを表示するには、  **Exclude by Selection** を選択します。 -  **Remove Sort/Filter** を選択して、以前に選択した並べ替えまたはフィルタリングオプションを削除します。,Accesskey + F
  Limit Selector,データセット内の最大行数の値を設定します。,Accesskey + R
  Stop,現在実行中のクエリをキャンセルします。,Accesskey + Q
  Execute/Refresh,SQLエディターパネルで選択したクエリーを実行または更新します。下矢印を選択して、他の実行オプションにアクセスします。- トランザクション中にエラーが発生した場合、トランザクションをロールバックするには **Auto-Rollback** を選択します。 - 各トランザクションをコミットするには、  **Auto-Commit** を選択します。トランザクションによって行われた変更は他の人に可視され、クラッシュが発生した場合に持続します。,F5
  Explain,現在のクエリの説明プランを表示します。 `EXPLAIN`の結果は、出力パネルの **Explain** タブにグラフィカルに表示され、 **Data Output** タブにテキスト形式で表示されます。,F7
  Explain analyze,現在のクエリーで`EXPLAIN ANALYZE`コマンドを呼び出します。  **Explain Options** メニューから -  **Verbose** を選択して、クエリプランに関する詳細情報を表示します。  -  **Costs** を選択して、各プランノードの推定起動と合計コスト、および各行の推定行数と推定幅に関する情報を含めます。 - バッファーの使用状況に関する情報を含めるには、  **Buffers** を選択します。 -  **Timing** を選択して、起動時間とクエリの各ノードで費やされた時間に関する情報を含めます。 - クエリプランに関する概要情報を含めるには、  ** Overview**  を選択します。,""
  Commit,トランザクションをコミットします。,Shift+CTRL+M
  Rollback,トランザクションをロールバックします。,Shift+CTRL+R
  Clear,**Clear** メニューのオプションを使用して、表示内容を消去します。-  **Clear Query Window** を選択して、 SQLエディターパネルのコンテンツを消去します。 -  ** Clear History** を選択して、  **History**  タブのコンテンツを消去します。,Accesskey + L
  Download as CSV,現在のクエリの結果セットをコンマ区切りリストにダウンロードします。  **設定-> SQLエディター-> CSV出力** ダイアログボックスを介してCSV設定を指定できます。,F8
  Macros,**Manage Macros** を選択して、マクロを作成、編集、またはクリアします。,""

SQLエディターパネル
-------------------

SQLエディターパネルは、クエリーを手動で提供したり、別のソースからクエリーをコピーしたり、ファイルからクエリーを読み取ることができるワークスペースです。
SQLエディターには、構文のカラーリングとオートコンプリート機能があります。

オートコンプリートを使用するには、クエリの入力を開始します。エディターにクエリーの次のオブジェクト名またはコマンドを提案したい場合は、
**Control+Space** を押します。たとえば、\ ``\ *SELECT \*FROM\*``
末尾にスペースを入力し、\*\*
Control+Space**を押してオートコンプリートオプションのメニューから選択します。

クエリーを入力したら、ツールバーから **Execute/Refresh**
を選択します。データベースサーバーは、実行するSQLエディタパネルの完全な内容を受信します。
SQLエディターに表示されるコードのセクションのみを実行するには、サーバーに実行するテキストを選択し、
**Execute/Refresh** を選択します。

コマンドの実行時にサーバーから返されたメッセージは、 **メッセージ**
タブに表示されます。コマンドが成功した場合、[ **Messages**
]タブに実行の詳細が表示されます。

**Edit** メニューは、コードのフォーマットとコメント付けに役立ちます。

- オートインデントを使用して、 **Return**
  を押して、前の行と同じ深さまでテキストをインデントします。

- 2行以上を選択して **Tab**
  を押して、インデントテキストをブロックします。

- コード内のSQLスタイルの実装または削除するか、Cスタイルのコメント表記を切り替えます。

ツリーから特定のオブジェクトをドラッグして、長いオブジェクト名の入力に費やす時間を節約することもできます。オブジェクト名を含むテキストは、スキーマ名で完全修飾されます。必要に応じて二重引用符が追加されます。ファンクションとプロシージャーの場合、ファンクション名とパラメーター名がクエリツールに貼り付けられます。

[データ出力]パネル
------------------

[Data
Output]パネルには、最近実行されたクエリによって生成されたデータと統計が表示されます。

[データ出力]タブ
^^^^^^^^^^^^^^^^

[ **Data Output**
]タブには、クエリの結果セットがテーブル形式で表示されます。次のことができます。

- 結果セットから選択してコピーします。

- **Execute/Refresh**
  オプションを使用して、クエリ実行情報を取得し、クエリ実行オプションを設定します。

- **Download as CSV** を選択して、 **Data Output**
  タブのコンテンツをコンマ区切りファイルとしてダウンロードします。

- ``SELECT``
  クエリーの結果セットのデータが更新可能な場合は、編集します。

結果セットは次の場合に更新可能です。

- すべての列は、単一のテーブルから直接選択されるか、実際にはテーブルの列ではありませんたとえば、2つの列の連結。テーブルから直接選択された列のみを編集できます。他の列は読み取り専用です。

- テーブルのすべての主キー列またはOIDが結果セットで選択されます。

複数回名前が変更または選択された列も読み取り専用です。

..  Note::
   更新可能なクエリー結果セットを使用するには、 psycopg2ドライバーバージョン2.8以降をインストールする必要があります。

編集可能および読み取り専用の列は、列ヘッダーの鉛筆と鍵のアイコンを使用して識別されます。

更新可能な結果セットは、データの表示/編集モードのデータグリッドに似ており、同じ方法で変更できます。

自動コミットがオフの場合、データは進行中のトランザクションの一部として作成されます。進行中のトランザクションがない場合、新しいトランザクションが開始されます。トランザクションがコミットされない限り、データの変更はデータベースにコミットされません。

保存中にエラーが発生した場合たとえば、 NOT
NULL制約を使用して列にNULLを保存しようとすると、データの変更がセーブポイントにロールバックされ、進行中のトランザクションで以前に実行されたクエリがロールバックされないことを確認します。

[データ出力]パネルに表示される以前のクエリまたはコマンドからのすべての行セットは、別のクエリを呼び出すと破棄されます。別のクエリツールのブラウザタブを開き、以前の結果を利用可能なままにします。

「Explain」タブ
^^^^^^^^^^^^^^^

クエリのExplainまたはExplain Analyzeプランを生成するには、ツールバーで
**Explain** または **Explain Analyze** を選択します。

メニューから **Explain** および **Explain Analyze**
に関連するオプションを選択できます。

..  Note::
   PEMは、JSON形式でExplain Analyzeプランを生成します。

Explainプランが正常に生成されると、 **Explain**
パネルの下に3つのタブ/パネルが表示されます。

グラフィカルタブ
^^^^^^^^^^^^^^^^

プランをSVGファイルとしてダウンロードするには、Explainキャンバスの左上隅にある
**Download** を選択します。 **SVGとしてのダウンロード** は、Internet
Explorerではサポートされていません。

**Explain Analyze** に付随するクエリプランは、 **Data Output**
タブで利用できます。

[分析]タブ
^^^^^^^^^^

[ **Anarise**
]タブには、プランの詳細が表形式で表示され、\ ``explain.depsez.com``
で使用可能なものと同様の形式が生成されます。テーブルの各行は、Explain
Planノードのデータを表します。出力には、ノード情報、排他的タイミング、包含タイミング、実際の行対計画的な行、実際の行、計画的な行、またはループを含めることができます。選択した行の子行は、オレンジ色の点でマークされます。

合計クエリ時間の排他的/包括的タイミングのパーセンテージが次の場合

- 90を超えると、赤が表示されます

- 50を超えると、オレンジ色が表示されます

- 10を超えると黄色が表示されます

プランナーが次の理由で行数実際のバース計画を誤って見積もった場合。

- 10回、黄色が表示されます

- 100回、オレンジ色が表示されます

- 1000回、赤が表示されます

[統計]タブ
^^^^^^^^^^

[ **Statistics** ]タブには、2つのテーブルの情報が表示されます。

- ノードタイプごとの統計は、各ノードタイプが参照された回数を示します。

- テーブルごとの統計は、各テーブルがクエリによって参照された回数を示します。

[メッセージ]タブ
^^^^^^^^^^^^^^^^

**Messages**
タブを使用して、最近実行されたクエリに関する情報を表示します。サーバーがエラーを返した場合、エラーメッセージは[
**メッセージ** ]タブに表示され、
SQLエディターではエラーの原因となった構文に下線が引かれます。クエリが成功した場合、[
**Messages**
]タブには、クエリが完了するまでに要した時間と取得された行数が表示されます。

[通知]タブ
^^^^^^^^^^

[ **Notifications**
]タブを使用して、PostgreSQLのListen/Notify機能を使用して通知を表示します。詳細については、
`PostgreSQL documentation <https://www.postgresql.org/docs/current/sql-listen.html>`_ を参照してください。

例

1. 最初のクエリツールセッションで\ ``LISTEN "foo"`` を実行します。

.. figure:: /images/query_output_notifications_listen.png
   :width: 70% 
   :alt: Query tool - notifications listen

   Query tool - notifications listen

2. 別のクエリツールセッションで、\ ``Notify``
   コマンドまたは\ ``pg_notify``
   ファンクションを実行して、ペイロードとともにイベントの通知を送信します。

.. figure:: /images/query_output_notifications_notify.png
   :width: 70% 
   :alt: Query tool - notifications notify

   Query tool - notifications notify

3. 最初のクエリツールセッションで[ **Notification**
   ]タブを観察できます。ここには、チャネルの記録時間、イベント、プロセスID、およびペイロードが表示されます。

.. figure:: /images/query_output_notifications_panel.png
   :width: 70% 
   :alt: Query tool - Output Notifications panel

   Query tool - Output Notifications panel

Query Historyパネル
-------------------

**Query History**
タブを使用して、現在のセッションのアクティビティを確認します。 [ **Query
History**
]タブには、次のような最近のコマンドに関する情報が表示されます。

- クエリーが呼び出された日時。

- クエリのテキスト。

- クエリーによって返された行数。

- サーバーがクエリーを処理し、結果セットを返すまでに要した時間。

- サーバーから返されたメッセージ[ **メッセージ**
  ]タブには記載されていません。

- クエリーのソースツールバーに対応するアイコンで示されます。

pgAdminによって内部的に生成されたクエリーは、データの表示/編集またはデータの保存操作中に表示または非表示にできます。

**Query History** タブの内容を消去するには、 **Clear > Clearhistory**
を選択します。

クエリ履歴は、クエリツールモードで実行している場合、ユーザーごとに各データベースのセッションを超えて維持されます。
View/Edit
Dataモードでは、履歴は保持されません。デフォルトでは、最後の20クエリーがデータベースごとに保存されます。
``MAX_QUERY_HIST_STORED``
値をオーバーライドすることにより、\ ``config_local.py``
でこれを調整できます。

接続ステータス
--------------

**Connection Status**
を使用して、クエリツールでステータスを選択することにより、現在の接続とトランザクションのステータスを表示します。

.. figure:: /images/query_tool_connection_status.png
   :width: 70% 
   :alt: Query tool - Connection Status button

   Query tool - Connection Status button

マクロ
------

クエリツールマクロを使用すると、単一のキーを押すだけで事前定義されたSQLクエリーを実行できます。事前定義されたクエリーには、プレースホルダー
``$SELECTION$``
を含めることができます。マクロが実行されると、プレースホルダーは、クエリツールの[クエリエディター]ペインで現在選択されているテキストに置き換えられます。

マクロを作成するには

1. クエリツールで、 **Macros > Manage Macros** を選択します。

2. 使用するキーを選択します。マクロとクエリの名前を入力します。

3. オプションで、選択プレースホルダーを含めます。

4. **Save** を選択します。

マクロをクリアするには、[ Manage Macros
]ダイアログボックスでマクロを選択し、 **Clear**
を選択します。プロンプトに **Yes** と応答します。

すべてのマクロをクリアするには、 **Key** の横にある **Clear**
を選択します。プロンプトに **Yes** と応答します。

マクロを実行するには、ショートカットキーを選択するか、 **Macros**
メニューから選択します。
