psql の起動:PostgreSQL メタコマンドの必須ガイド

スキーマの確認、出力のフォーマット、データベースの切り替え、ターミナルでの作業効率化に役立つpsqlメタコマンドを学びます。

psqlを強化する:PostgreSQLメタコマンドの必須ガイド

ターミナルでPostgreSQLを操作する際、psqlのメタコマンドを使えば、日常的な確認のためにカタログクエリを書く手間が省けます。これらのバックスラッシュコマンドを使うと、テーブルの一覧表示、オブジェクトの説明、データベースの切り替え、出力のフォーマット、ヘルプの表示などをセッションを離れずに行えます。

このガイドでは、最も頻繁に使用するpsqlコマンドを紹介し、実際のデータベース作業でどのように活用できるかを説明します。

psqlメタコマンドを理解する

psqlのメタコマンドは、PostgreSQLサーバーに送信されて実行されるのではなく、psql自身によって処理されるディレクティブです。先頭のバックスラッシュ(\)で簡単に識別できます。この区別は重要で、メタコマンドは標準SQLとは異なる独自の構文と動作を持ちます。

例えば、すべてのテーブルを一覧表示するにはSELECT * FROM information_schema.tables;と書くかもしれませんが、psqlのメタコマンドなら\dtだけで同じ結果が得られます。

データベース検査のための必須メタコマンド

データベース構造の確認は頻繁に行う作業です。psqlには、このプロセスを簡単にするためのメタコマンドがいくつか用意されています。

テーブルの一覧表示(\dt

\dtコマンドは最もよく使われるメタコマンドの1つです。現在のデータベース内のすべてのテーブルを、そのスキーマと所有者とともに一覧表示します。

  • 例:

    \dt
    
  • 出力:

                           List of relations
    Schema |    Name    | Type  |  Owner   
    --------+------------+-------+----------
    public | accounts   | table | postgres 
    public | products   | table | postgres 
    sales  | orders     | table | dbadmin  
    (3 rows)
    
  • バリエーション:

    • \dt+:テーブルサイズや説明を含む、より詳細な情報を表示します。
    • \dt schema.*:特定のスキーマ内のテーブルのみを一覧表示します。

テーブルとカラムの説明(\d

\dコマンドは、特定のテーブルの構造(カラム、データ型、制約、インデックスなど)を理解するのに非常に役立ちます。

  • 例: productsテーブルを説明する場合:

    \d products
    
  • 出力:

                                   Table "public.products"
     Column   |         Type          | Collation | Nullable | Default 
    ----------+-----------------------+-----------+----------+---------
     product_id | integer             |           | not null | 
     name       | character varying(100)|           |          | 
     price      | numeric(10, 2)        |           |          | 
    Indexes:
        "products_pkey" PRIMARY KEY, btree (product_id)
    
  • バリエーション:

    • \d+ table_name:ストレージパラメータやコメントを含む、さらに詳細な情報を表示します。
    • \dn:すべてのスキーマを一覧表示します。
    • \df:すべての関数を一覧表示します。
    • \dv:すべてのビューを一覧表示します。

ビューの検査(\dv

テーブルと同様に、ビューも一覧表示および説明できます。

  • 例(ビューの一覧表示):

    \dv
    
  • 例(ビューの説明):

    \dv my_view
    

スキーマの一覧表示(\dn

データベース内のすべてのスキーマを表示するには、\dnコマンドを使用します。

  • 例:
    \dn
    

クエリ管理と出力制御のためのメタコマンド

psqlは、クエリ結果の表示方法を制御したり、クエリ履歴を管理したりするための強力なオプションを提供します。

クエリのタイミング(\timing

\timingコマンドは、各SQLクエリの経過時間の表示を切り替えます。クエリをチューニングする際の簡単な比較に便利ですが、実際の実行計画が必要な場合はEXPLAIN (ANALYZE, BUFFERS)を使用してください。

  • 例(タイミングをオンにする):

    \timing on
    

    これで、実行するすべてのクエリの後に実行時間が表示されるようになります。

  • 例(タイミングをオフにする):

    \timing off
    

出力のフォーマット(\a\H\t

  • \a:整列(テーブル形式)と非整列(CSV形式)の出力を切り替えます。非整列出力はプログラムで解析しやすいことがよくあります。

    \a
    SELECT * FROM products;
    
  • \H:出力形式をHTMLに切り替えます。

    \H
    SELECT * FROM products;
    
  • \t:カラムヘッダーと行数フッターの表示を切り替えます。これは、出力を別のコマンドにパイプで渡しやすくする場合に便利です。

    \t
    SELECT name, price FROM products;
    

ページング(\pset pager

クエリ結果が長い場合、psqlは環境やページャ設定に応じてlessなどのページャを使用することがあります。その動作は\pset pagerで制御できます。

  • 例(長い出力にページャを使用する):

    \pset pager on
    
  • 例(ページャを無効にする):

    \pset pager off
    

管理用メタコマンド

検査や出力制御以外にも、psqlは一般的な管理タスクのためのコマンドを提供します。

データベースの一覧表示(\l

接続中のPostgreSQLサーバー上の利用可能なすべてのデータベースを表示するには、\lを使用します。

  • 例:
    \l
    

別のデータベースへの接続(\c

すでにpsqlセッションに接続していて、別のデータベースに切り替えたい場合は、\cコマンドを使用します。

  • 例: mydatabaseデータベースに接続する場合:
    \c mydatabase
    

ヘルプの表示(\?

迷ったときは、psqlにヘルプ機能が組み込まれています。\?コマンドですべての利用可能なメタコマンドを一覧表示でき、\!を使用するとシェルコマンドを実行できます。

  • 例(すべてのメタコマンドを一覧表示):

    \?
    
  • 例(シェルコマンドを実行、例:ls):

    \! ls -l
    

ベストプラクティスとヒント

  • 完全なpsqlコマンドにはシェルエイリアスを使用する: シェルエイリアスは、すでに開いているpsqlセッション内で\dtを実行することはできませんが、一般的な起動コマンドを短縮できます。例:alias pprod='psql "postgresql://[email protected]/prod"'
  • SQLと組み合わせる: メタコマンドはSQLと排他的ではありません。SELECT文を書く前にスキーマを素早く確認したり、\timingを使用してクエリの実行時間を比較したりできます。
  • スコープを理解する: メタコマンドは現在のpsqlセッションと接続のコンテキスト内で動作することを覚えておいてください。\cのようなコマンドは、そのセッションのアクティブなデータベースを変更します。
  • \?を積極的に使用する: 組み込みのヘルプは包括的で、コマンドを思い出したり新しいコマンドを発見したりするための優れたリソースです。

まとめ

\dt\d\dn\l\c\timing\pset pager\?から始めましょう。これらの数個のコマンドで、日常的な検査作業のほとんどをカバーでき、psqlが単なる生のSQLプロンプトではなくなります。