このエントリーをはてなブックマークに追加

PostgreSQL 9.1でJSON型を使う

次にリリースされるPostgreSQL 9.2からはJSON型が組み込みでサポートされる予定です。

JSON型のインストール

JSON型は9.2からなのですが、Andrew さんが9.1でも動くようにする拡張を公開してくださっています。

https://bitbucket.org/adunstan/json_91

(bitbucketですがgitです)

% git clone https://bitbucket.org/adunstan/json_91.git
% cd json_91
% make
% make install

さて、これで拡張が入りましたので、これをdatabaseに入れます。

% createdb json
% psql json -c "CREATE EXTENSION json;"

これで準備は終わりです。さっそく使ってみましょう。

INSERT JSON

まずはテーブル定義です。普通にJSON型を定義できます。

CREATE TABLE json_table (
   id    bigserial primary key,
   value  json
)
;

まずは INSERT です。

INSERT INTO json_table(value) VALUES
  ('{"name":"rudi", "age": 24, "fav": ["python", "emacs", "postgresql"]}');

取得には json_out という関数を使います。

SELECT json_out(value) FROM json_table;
                              json_out
-------------------------------------------------------------------
{"name":"rudi", "age": 24, "fav": ["python", "emacs", "postgresql"]}

他にはarray_to_json、row_to_jsonもあります。

SELECT array_to_json(ARRAY[1,2,3]);
 array_to_json
---------------
 [1,2,3]


SELECT row_to_json(row(1,2,'hoge'));
         row_to_json
-----------------------------
 {"f1":1,"f2":2,"f3":"hoge"}

WHEREとかどう書くの?

さて、では次はWHERE句を使ってJSONの中身を絞ったり、インデックスを張る、とかいいたいとろですが、実は9.2単体ではJSON型はバリデーションとJSONの構築しか出来ず、そのままではできません。

これにはPostgreSQLの拡張である、plv8jsを使います。

が、それはまた次回…