【実務・中級編】 psqlによるカタログ参照 – PostgreSQL

脱・迷子!psqlのメタコマンドでPostgreSQLの「中身」を瞬時に把握する方法

現場でバリバリとPostgreSQLを触っていると、「あれ、このテーブルどんな定義だっけ?」「この関数、引数なんだっけ?」と立ち止まる瞬間、ありますよね。

そんな時、わざわざ `information_schema` や `pg_catalog` を直接 `SELECT` して、長いクエリを組み立てていませんか? もちろん、それもエンジニアの嗜みの一つではありますが、忙しい開発の合間にいちいちSQLを書くのは正直スマートじゃありません。

PostgreSQLのコマンドラインツール `psql` には、僕たちが知りたい情報を一瞬で引き出す「魔法のショートカット」、いわゆるメタコマンドが用意されています。今日は、僕が実務で「これだけは体に染み込ませろ!」と言っている、必須コマンドたちを紹介します。

—

1. テーブルの確認には `\dt`

まずは基本中の基本。データベース内にあるテーブルを一覧表示する `\dt` です。

postgres=# \dt

これだけでテーブル一覧が出ますが、実務でよくやるのは `\dt+` です。プラスを付けると、テーブルサイズや説明(comment)まで親切に教えてくれます。

postgres=# \dt+ public.

`public.` と指定することで、対象を絞れるのもポイント。開発中はテーブルが増えがちなので、こうやってスコープを絞る癖をつけておくと、目当てのテーブルをすぐ見つけられますよ。

2. インデックスの確認は `\di`

「クエリが遅いな」と思った時、まず疑うべきはインデックスですよね。いちいちテーブル定義を見に行かなくても、`\di` でインデックス一覧を確認できます。

postgres=# \di+ schema_name.

特定のテーブルに紐づくインデックスだけ見たい時は、テーブル名を指定してあげればOKです。インデックスが効いているか、サイズはどれくらいか、このコマンド一発で俯瞰できるので、チューニングの第一歩として重宝します。

3. 関数・プロシージャの確認は `\df`

PostgreSQLは強力な関数機能を持っていますが、数が増えてくると「どの引数を取るんだっけ?」と混乱しますよね。そんな時は `\df` の出番です。

postgres=# \df+ schema_name.function_name

関数の定義だけでなく、引数の型や戻り値の型まで丁寧に表示してくれます。これ、実は地味ながらめちゃくちゃ助かる機能で、仕様書が手元になくてもコードの挙動を追うことができます。

4. スキーマ構成を把握する `\dn`

プロジェクトが大きくなると、スキーマで論理的に分割するようになりますよね。`\dn` は現在のデータベース内にあるスキーマの一覧を表示します。

postgres=# \dn

「今どのスキーマで作業しているんだっけ?」と迷ったら、まずはこれで現在地を確認しましょう。

—

まだ「SQLでカタログ叩き」を続けますか?

もちろん、`pg_class` や `pg_attribute` を直接叩くSQLは強力です。複雑な解析が必要な時は僕も書きます。でも、日々の開発の「ちょっと確認したい」という瞬間に、わざわざ重いクエリを書く必要はありません。

メタコマンドのいいところは、「手癖」にできるところです。

  • `\dt` (Table)
  • `\di` (Index)
  • `\df` (Function)
  • `\dn` (Namespace/Schema)

最初は意識しないと使えませんが、一度慣れてしまうと、psqlを立ち上げた瞬間に指が勝手に動くようになります。この「迷いのない操作感」こそが、熟練エンジニアのスピードの源泉なんです。

最後に:`\h` を友達にしよう

最後に一つだけ。もし忘れてしまっても大丈夫です。`\h` を打てば、メタコマンドのヘルプがいつでも助けてくれます。

postgres=# \h \dt

このように、ヘルプの後にコマンドを指定すれば、その詳細な使い方を表示してくれます。

データベースを自由に操れる感覚を掴むと、PostgreSQLとの距離がぐっと縮まりますよ。明日からの作業で、ぜひ意識して使ってみてください。それでは、良いエンジニアリングライフを!

コメント

タイトルとURLをコピーしました