Chapter 8. 配列

Note: これは配列の振る舞いに関する章にならなくてはなりません. 誰かボランティアいませんか? - thomas 1998-01-12

Postgresでは,インスタンスの属性を, 固定長または可変長の多次元配列として定義することができます. どのようなベースの型でも,またユーザ定義の型でも生成する ことができます.それらの使用法について説明するために, まずはベース型配列で1つのクラスを作ってみましょう.

CREATE TABLE 従業員給与 (
    名前            text,
    四半期毎の給与  int4[],
    スケジュール    text[][]
);

上記の問い合わせでは,text文字列(名前), 四半期毎の従業員の給与を表すint4の1次元 配列(四半期毎の給与),および従業員の1週間のスケジュールを表す textの2次元配列(スケジュール)という 3つのメンバを持つ,従業員給与という名前のクラスを生成します. ここで,いくつかINSERTSをやってみましょう. 配列に追加する際は,値を{}で囲み,さらにそれらをカンマで区切って やることに注意してください.もしあなたがC をご存知であれば,これは構造体の初期化をするための書式に似ていない こともありません.

INSERT INTO 従業員給与
    VALUES ('ビル',
    '{10000, 10000, 10000, 10000}',
    '{{"会議", "昼食"}, {}}');
INSERT INTO 従業員給与
    VALUES ('キャロル',
    '{20000, 25000, 25000, 25000}',
    '{{"討議", "協議"}, {"会議"}}');
デフォルトでは,Postgresは配列に 対して " 1 から始まる" 番号付けの規則を使います。つまり、n 個の 要素を持つ配列は,配列[1]から始まり配列[n]で終ります。ここで、 従業員給与に対していくつかの問い合わせをやってみましょう。まず、 一度に配列のひとつの要素だけにアクセスする方法を示します。この 問い合わせは、第 2 四半期に給与が変わる従業員の名前を取り出します。
SELECT 名前
    FROM 従業員給与
    WHERE 従業員給与.四半期毎の給与[1] <>
    従業員給与.四半期毎の給与[2];

+--------+
|名前    |
+--------+
|キャロル|
+--------+

この問い合わせでは,すべての従業員の第 3 四半期の給与を取り出します。

SELECT 従業員給与.四半期毎の給与[3] FROM 従業員給与;

+---------------+
|四半期毎の給与 |
+---------------+
|10000          |
+---------------+
|25000          |
+---------------+

また、任意の配列の一部や副配列にアクセスすることもできます. この問い合わせは,週の頭 2 日分のビルのスケジュールの中で 最初の項目を取り出します。

SELECT 従業員給与.スケジュール[1:2][1:1]
    FROM 従業員給与
    WHERE 従業員給与.名前 = 'ビル';

+---------------+
|スケジュール   |
+---------------+
|{{"会議"},{""}}|
+---------------+