postgres 9.3 でjson

postgres 9.3にはjsonがネィティブにサポートされている。json内の値をアクセスしたりインデックスできる。

psql (9.3.0)
Type "help" for help.

# JSON型!
yoyodb=> CREATE TABLE publishers(id INT, info JSON);
CREATE TABLE

# JSON型をインデックス!!
yoyodb=> CREATE INDEX ON publishers( ( info->>'name' ) ) ;
CREATE INDEX

yoyodb=> insert into publishers (id,info) values (1, '{"name":"foo"}');
INSERT 0 1
yoyodb=> insert into publishers (id,info) values (2, '{"name":"bar"}');
INSERT 0 1
yoyodb=> insert into publishers (id,info) values (3, '{"name":"baz"}');
INSERT 0 1
yoyodb=> select * from publishers
yoyodb-> ;
id | info

                                        • -

1 | {"name":"foo"}
2 | {"name":"bar"}
3 | {"name":"baz"}
(3 rows)

# col->'key'でJSON内のフィールドをアクセス
yoyodb=> select info->'name' from publishers ;
?column?

                  • -

"foo"
"bar"
"baz"
(3 rows)

yoyodb=> select info from publishers where info->>'name'='bar';
info

                              • -

{"name":"bar"}
(1 row)

yoyodb=> select info->'name' from publishers where info->>'name'='bar';
?column?

                  • -

"bar"
(1 row)

debianでのインストール

http://www.postgresql.org/download/linux/ubuntu/

echo 'deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main' | sudo tee

/etc/apt/sources.list.d/postgres.list

https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

sudo apt-get update

sudo apt-get install postgresql-9.3

DBとユーザの設定

コマンドでこうする


createuser --no-adduser --no-createdb --pwprompt --encrypted yoyota
createdb --owner=ams --encoding=UNICODE yoyodb
あるいは

su postgres
psql
CREATE ROLE yoyota WITH LOGIN NOSUPERUSER NOCREATEROLE ENCRYPTED PASSWORD 'xxxx';
CREATE DATABASE yoyodb WITH OWNER yoyota;

クライアント権限

/etc/postgresql/9.3/main/pg_hba.conf
にこのようなラインを追加
local all all md5


これは超画期的ですよ。スキーマレスなJSONSQLをうまく融合させている。Postgresを優秀なRDBからno-sqlまでカバーする万能DBにしてしまう機能なのかもしれない。これからの開発はpsqlにきまり。