PostgreSQLドキュメントの歩き方 – アプリケーション開発編

本連載では巨大な PostgreSQLドキュメントの読むべきポイントを紹介していきます。
デプロイメント編運用管理編に引き続きまして、今回はアプリケーション開発編です。

アプリケーション開発編では、データベースサーバは既に構築されているものとして、その上でテーブル定義を記述したり、そこで動作させる SQL やユーザ定義関数(ストアドプロシージャ)を開発するために見るべきドキュメントを示します。

なお、PostgreSQLドキュメントの在り処や基本的な見方についてはデプロイメント編の冒頭に記載しています。また、これまで同様、PostgreSQL 10.x バージョンを主対象に書いています。

SQLの基礎を学ぶ

まったくの初心者はどこから手を付ければ良いでしょうか。

それらしい章として[I チュートリアル][1章 さあ始めましょう]があります。とても短いですので、1章は読んでおくことをおすすめします。特に[1.4 データベースへのアクセス]でコマンドベースのDBクライアントソフトウェア psql の基本的な使い方が説明されています。

残念ながら PostgreSQLドキュメントでは PgAdmin4 などの GUIを使う場合については触れられていません。psqlを使う想定です。また、[I チュートリアル]の記載内容は暗黙に UNIX/Linux 上であることを前提にしています。Windows の場合には、いくらか読み替えが必要です。

[I チュートリアル][2章 SQL言語]は SQL言語の基礎を解説しています。また、[3章 高度な諸機能]はいくつかの応用機能を取り上げています。これらの章を学んだ後、SQL の書き方について更に学習するには[6章 データ操作][7章 問い合わせ]に進むのが良いでしょう。

SQL構文の詳細確認

より上級者むけに PostgreSQL における SQL言語の構文規則の詳細が[4章 SQLの構文]で説明されています。こちらは必ずしも易しくありませんが、厳密で取りこぼしのない説明が充実しています。

3章の次に通して全て読む必要はありませんが、いったん PostgreSQL の SQL記述に慣れた後に「なぜ、これが構文エラーになるのだろう」「こういうコメントの書き方はできるのだろうか?」「このような場合にはどちらの解釈が優先されるのだろう」といった疑問が生じた場合に、4章に立ち戻ると解決の助けになるはずです。

[第10章 型変換]も4章と位置づけが似ています。順に読む必要のある章ではありませんが、SQLでの暗黙の型変換について詳細確認が必要になったときに立ち戻って調べることになる内容です。

SQL実行クライアントの使い方

pgAdmin3 あるいは PgAdmin4 については PostgreSQLドキュメントに記載がありませんでした。加えて、psql を使う場合にも、[I チュートリアル]の記載では少し不足しています。

[クライアントアプリケーション – psql]「使用方法」は読んでおきましょう。特に「メタコマンド」の d で始まるメタコマンドは、今在るテーブル等のデータベースオブジェクトの一覧や個々の定義を確認するために多用されますので、把握しておくべきです。

SQLを書く

SQLの基本的な書き方を理解したうえで、アプリケーションプログラムのために SQL を作成する際に、参照が必要となるのは、SQLコマンドのリファレンスと関数と演算子のリファレンスです。これは[VI.リファレンス – SQLコマンド][9章 関数と演算子]に在ります。

[VI.リファレンス – SQLコマンド]には全てのSQLコマンドがアルファベット順に並んでおり、それぞれ詳細な解説が記載されています。

SQL構文を示すのにいくつかメタ記号が使われています。例えば以下の ABORTコマンドの構文は、大括弧([])と縦線(|)でABORTコマンドにはオプションで WORK または TRANSACTION を付与することができるということをあらわしています。

ABORT [ WORK | TRANSACTION ]

このような表現方法についての説明は[はじめに – 3.規約] に書かれています。

9章では関数や演算子を対象とするデータ型ごとに分類して節が設けられています。文字列データに関する処理であれば[9.4 文字列関数と演算子]を見れば良いという具合です(ただし[9.7 パターンマッチ]は別の節が立てられています)。また、厳密には関数ではありませんが、CASE式などの条件式についても 9章内([9.17. 条件式])に掲載されています。

ロックとトランザクション制御

ロックとトランザクションの振る舞いはデータベースソフトウェアによって違いがありますので、新たに PostgreSQL に取り組む技術者は、その振る舞いを把握しておく必要があります。これらは[13章 同時実行制御]に記載されています。

13章は、この種の内容に親しんでいない人には決して易しくありませんが、それでも丁寧に読んでおくべき章です。ロックやトランザクションについて誤解があると、タイミングに依存して発生して、後になってからデータが狂っていたことが発覚するという、性質の悪いソフトウェア障害を埋め込んでしまうかもしれないからです。

テーブル定義をする

テーブルを定義するには[5章 データ定義]を参照してください。「テーブルは行と列からできています」といった基本的な話([5.1 テーブルの基本])から始まり、テーブル定義で使用できる各種機能について、詳細に説明されています。また、テーブル定義で使う各データ型については[8章 データ型]に記載されています。

テーブルを定義したなら、そのテーブルにインデックスも定義するでしょう。
インデックスについては[11章 インデックス]に、それが何であるかといった基本的な話([11.1 序文])から各種適用方式の詳細まで記載されています。具体例を交えながら「このようなインデックスを作る意義は何か」ということまで言及されていて、有用な内容といえます。

ユーザ定義関数を書く

PostgreSQL では様々な言語でユーザ定義関数を書くことができます。

まずは、[37.4 問い合わせ言語(SQL)関数]を読んで、SQL言語によるユーザ定義関数の作り方を把握するのが良いでしょう。他の言語とも共通の CREATE FUNCTIONコマンドの使い方や、様々な引数・戻り値のバリエーションについて、例を示しての易しい解説が含まれています。

その上で[SQLコマンド – CREATE FUNCTION]にて CREATE FUNCTIONコマンドのリファレンスも確認しておきましょう。

PL/pgSQLについては[42章 PL/pgSQL – SQL手続き言語]に全てが書かれています。その他の手続き言語 PL/TclPL/PerlPL/Python についても、それぞれ章が割かれています。

PostgreSQLでテーブル変更に対応したトリガを設定する場合、トリガ関数を PL/pgSQL等の手続き言語で記述します。トリガの作り方については、各手続き言語を解説する章内に記述があります。PL/pgSQL によるトリガであれば[42.9 トリガプロシージャ]を参照してください。そのうえで詳細を学びたければ[38章 トリガ]も参照すれば良いでしょう。

まとめ

アプリケーション開発のための PostgreSQLドキュメントの読むべき箇所を見ていきました。

PostgreSQLドキュメントはチュートリアルに弱点があり、ゼロから学習する人むけの内容が少なめです。
一方で、ある程度理解できるところまでたどり着ければ、各機能の解説が充実していることがわかります。ドキュメント不足に悩む必要はありません。むしろ、分量が多すぎて読むのが大変です。

本稿では「ある程度理解」にたどり着くためにどの順で読んでいけばよいかを示しました。皆様のお役にたてれば幸いです。

PostgreSQLドキュメントの歩き方シリーズは以上でひとまず終了です。