5. 改めて・・・ PostgreSQL とは
代表的なオープンソースRDBMSのひとつ
Ingres(1970~ UCB) を先祖に持つ
PostgreSQL 6.0 (1996 ~) から 15年以上の歴史
BSDタイプのライセンスで配布
PostgreSQL Global Development Gruop と
University of California が著作権を持つ
ひとつのオーナー企業、オーナー個人を持たない
PostgreSQL開発に時間を割く技術者を提供している
企業がいくつかある/その企業群も少しずつ変遷して
いる
日本PostgreSQLユーザ会 5
6. PostgreSQL開発体制
支援企
Contributors 業
藤井雅雄
板垣貴裕
Major Contributors 原田均
石井達夫
:
Core Team 30~40名
Josh Berkus
Tom Lane
Peter Eisentraut
Magnus Hagander
Bruce Momjian
Dave Page
開発コミュニ
ティ
日本PostgreSQLユーザ会 6
28. JSONデータ型(2)
使用例(テーブル定義)
postgres=# d users
Table "public.users"
Column | Type | Modifiers
--------+---------+-----------
id | integer | not null
name | text | not null
data | json |
Indexes:
"users_pkey" PRIMARY KEY, btree (id)
postgres=# SELECT * FROM users ORDER BY id;
id | name | data
----+------+------------------------------------------------------------
1 | foo | {"last_access":"2012-01-01 12:34:56","features":"[1,3,5]"}
2 | bar | {"last_access":"2011-11-25 23:42:41","features":"[2,3,6]"}
(2 rows)
日本PostgreSQLユーザ会 28
30. JSONデータ型(4)
使用例(row_to_json()関数)
postgres=# SELECT row_to_json(row(id, name))
postgres-# FROM foo WHERE id = 1;
row_to_json
--------------------------
{"f1":1,"f2":"name_1"}
(1 row)
postgres=# SELECT row_to_json(t) FROM
postgres-# (SELECT id, name FROM t WHERE id = 1) t;
row_to_json
--------------------------
{"id":1,"name":"name_1"}
(1 row)
日本PostgreSQLユーザ会 30
31. その他の拡張(1)
インデックス
Unbalanced treeをサポートするSP-GiST(Space-
Partitioned GiST)アクセスメソッドの追加
セキュリティ
セキュリティバリアビュー
VIEWのsecurity_barrier属性と関数のLEAKPROOF属性を組
み合わせることで、関数を通じてアクセス不可のカラム内容
が漏れることを防ぐ
CREATE や DROP もSE-Postgresで管理可能
ALTER TABLEでの .. ALTER TYPE の改善
全レコード書き替えは必要がときだけ
日本PostgreSQLユーザ会 31
34. Parameterized Paths(1)
実行時パラメータを考慮したプランを生成する機
能
postgres=# PREPARE s(int) AS SELECT * FROM t WHERE id < $1;
PREPARE
postgres=# EXPLAIN (COSTS off) EXECUTE s(1);
QUERY PLAN
------------------------------
Index Scan using t_pkey on t
Index Cond: (id < 1)
(2 rows)
postgres=# EXPLAIN (COSTS off) EXECUTE s(1000000);
QUERY PLAN
--------------------------
Seq Scan on t
Filter: (id < 1000000)
(2 rows)
日本PostgreSQLユーザ会 34