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 従業員給与.名前 = 'ビル';
+---------------+
|スケジュール |
+---------------+
|{{"会議"},{""}}|
+---------------+