メインルーティンを攻略!
貢献モジュール
PostgreSQLのソースコードを解凍したディレクトリの直下にcontribというディレクトリがあり、そこに貢献モジュールと呼ばれる各種のプログラムが含まれています。これら貢献モジュールというのはどんなものでしょうか。そのREADMEを読んでみましょう。
This subtree contains porting tools, analysis utilities, and plug-in features that are not part of the core PostgreSQL system, mainly because they address a limited audience or are too experimental to be part of the main source tree. This does not preclude their usefulness.
「このサブツリーはコアのPostgreSQLシステムには入っていない移植ツール、分析ユーティリティー、そしてプラグイン機能を含んでいます。主な理由は、限られたユーザに対していたり、メインソースツリーに入れるにはあまりにも試験的という理由です。(とは言っても)それらの有用性を排除しているわけではありません」
"address"は「... に対して演説する」。"audience"は「観客」とか「視聴者」ということですが、この分野では「ユーザ」のほうが適切です。「役に立つことは疑いありません」とも付記されています。実際contribのモジュールからメインモジュールに入ったものもあります。使用するにはユーザ自身でコンパイルする必要があり、以下にその説明があります。
Most items can be built with gmake all' and installed with gmake install' in the usual fashion, after you have run the configure' script in the top-level directory.
「ほとんどの項目はトップレベルのディレクトリでconfigure'スクリプトを実行した後、いつものとおり、gmake all'でビルドし、gmake install'でインストール可能です」
Some directories supply new user-defined functions, operators, or types.
「いくつかのディレクトリは新規ユーザ定義の関数、演算子およびデータ型を提供します」
In these cases, after you have installed the files you need to register the new entities in the database system by running the commands in the supplied .sql file. For example,
$ psql -d dbname -f module.sql
「これらの場合、ファイルをインストールした後、提供された.sqlファイルにあるコマンドを実行して新規エンティティをデータベースシステムに登録する必要があります。 例えば『$ psql -d dbname -f module.sql』のようにします」
チュートリアル
これまで触れませんでしたが、src/tutorialというディレクトリがありそこにいくつかのサンプルが格納されています。PostgreSQLのオフィシャルドキュメント(http://www.postgresql.org/docs/)に「I. チュートリアル」という目次があり、そこで記載されているSQLがここにあるものです。
ソースコードをダウンロードせず、例えばWindowsインストーラや、Linuxでrpm、apt-getによりバイナリのみをインストールした場合入手できませんので、そのような環境であればソースコードを入手して参照してください。
オフィシャルドキュメントと多少表現が違うので、「テーブルに行を挿入」の部分をbasics.sourceで読んでみます。
Populating a Table With Rows:
An INSERT statement is used to insert a new row into a table. There are several ways you can specify what columns the data should go to.
「テーブルに行を挿入:新しい行をテーブルに挿入するにはINSERT文が使用されます。どの列にデータが入力されるのかを指定する方法にはいくつかあります」
"populate"は「居住させる」が原意ですが、データベースシステムの場合、「データベーステーブルにデータを入れる」ことを示します。"column"は「列」または「カラム」で、関係論で言う場合は"attribute"、「属性」と表現します。ちなみに"row"は「列」または「ロー」、関係論では"tuple"で、「組」または「タプル」と表します。また、これらを「フィールド」「レコード」といった名称で呼んでいる書籍もありますので、注意してください。PostgreSQLのドキュメントもいろいろな人が執筆している関係上、統一されているわけではありません。
1. The simplest case is when the list of value correspond to the order of the columns specified in CREATE TABLE.
「1. 最も単純な事例は、CREATE TABLE で指定された列の順番に対応した値のリストです」
INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');
INSERT INTO cities VALUES ('San Francisco', '(-194.0, 53.0)');
2. You can also specify what column the values correspond to. (The columns can be specified in any order. You may also omit any number of columns, e.g., unknown precipitation below.
「2. 値がどの列に対応するかを指定することもできます(列は順不同で指定できます。列はいくつ割愛しても構いません。例えば以下のように降水量が分からない場合)」
"in any order"は「どんな順番でも」。"precipitation"は「降水量」。"precipitation area"は、従って「降水域」。日本は雨が多いので、外国人と話す場合に覚えておくと便利な単語です。
INSERT INTO weather (city, temp_lo, temp_hi, prcp, date) VALUES ('San Francisco', 43, 57, 0.0, '1994-11-29');
INSERT INTO weather (date, city, temp_hi, temp_lo) VALUES ('1994-11-29', 'Hayward', 54, 37);
いかがでしたでしょうか。この連載にあたって、英語の文章を単に読み解くとこではなく、切り出した文章とPostgreSQLの技術的背景のつながりがある程度分かるように解説を加えたつもりです。ぜひ記事評価で、難易度やテーマの設定についての感想をお送りください。最後までお付き合いを頂いた読者の皆さまに感謝します。