[ソフト] PostgreSQLの配列

今回、お仕事で PostgreSQL の配列を使ってみました。配列は RDBの標準機能ではありませんし、乱用はよくないと思いますが、場合によっては便利です。

http://www.postgresql.jp/document/pg815doc/html/arrays.html

配列カラムの作成

CREATE TABLE sample01 (
  id   integer,
  name varchar(64),
  list integer[] );
  • 配列の大きさを指定する必要はありません
  • 多次元の配列も作れます。

参照(select)

以下のような参照ができます。

  • 配列全体
SELECT list FROM  sample01 WHERE id = 1;
  • 1要素、添え字は 1から始まります。データの無い要素を参照すると NULL が戻ります
SELECT list[2] FROM  sample01 WHERE id = 1;
  • 範囲指定、下の例では配列の2番目〜10番目
SELECT list[2:10] FROM  sample01 WHERE id = 1;

配列全体や、範囲指定で選択した場合は 以下のように {} でくくられ , 区切りの文字列として選択されます。

SELECT list[2:4] FROM  sample01 WHERE id = 1;
list
-----------
{2,3,4}

挿入/更新 (insert/update)

挿入、更新時にも 配列全体、要素、範囲指定が使えます。

INSERT INTO sample01(id,name,list) VALUES(11,'Yoshida','{2,4,6}');
UPDATE sample01 SET list[2] = 15 WHERE id = 2;
UPDATE sample01 SET list[1:3] = '{7,5,3}' WHERE id = 2;

その他

配列操作用の便利な関数(?)などがあります。

  • ARRAY[] 配列データの作成
  • array_dims 配列の大きさを戻す
  • array_prepend,array_append,array_cat 配列へのデータの追加
  • any,all 配列内の検索

大先生のところに、応用編が

http://d.hatena.ne.jp/habuakihiro/20061102#1162439941