SlideShare a Scribd company logo
関西オープンフォーラム 2015
(2015-11-06)
PostgreSQL 9.5 最新機能
ぬこ@横浜 (@nuko_yokohama)
2
自己紹介
ぬこ@横浜
でググると何かしら出てくると思います
今日は日本 PostgreSQL ユーザ会
( JPUG )枠でこちらへ来ました。
3
自己紹介 ( こんなの作ってた )
SELECT data, data + ' 拾 ' FROM ksj_sample;
data | ?column?
------------+----------------
五百壱拾六 | 五百弐拾六
零 | 壱拾
参万壱百壱 | 参万壱百壱拾壱
(3 rows)
SELECT data, data * ' 拾 ' FROM ksj_sample;
data | ?column?
------------+--------------
五百壱拾六 | 五千壱百六拾
零 | 零
参万壱百壱 | 参拾壱千壱拾
(3 rows)
SELECT sum(data) FROM ksj_sample;
sum
----------------
参万六百壱拾七
(1 row)
SELECT * FROM ksj_sample ORDER BY data;
data
------------
零
五百壱拾六
参万壱百壱
(3 rows)
ksj (漢数字型)
漢数字で四則演算や
比較演算できる、誰得データ型
4
自己紹介 ( こんなの作ってた )
SELECT * FROM foo WHERE data = ' エバンゲリオン';
id | data
----+------------
3 | エヴァンゲリヲン
(1 row)
SELECT * FROM foo WHERE data = ' センヌリティウス';
id | data
----+------
(0 rows)
SELECT * FROM foo WHERE data /= ' センヌリティウス';
id | data
----+------------------
4 | セリヌンティウス
(1 row)
ntext( ゆるい文字型 )
日本語正規化比較
ゆるい比較演算子 (/=)
類似度計算で typo を許容する
誰得日本語テキスト型と
全文検索用パッチ
5
自己紹介 ( こんなの作ってた )
CREATE FOREIGN TABLE bar3 (
my_name text,
my_gender text,
follower_name text,
follower_gender text)
SERVER foo
OPTIONS (query '{
"query":"START n=node(*)
MATCH p=fm<-[]-n<-[]-fm
RETURN n.name as my_name, n.gender as my_gender,
fm.name as follower_name, fm.gender as follower_gender" }');
SELECT my_name, my_gender, follower_name, follower_gender FROM bar3;
my_name | my_gender | follower_name | follower_gender
---------+-----------+---------------+-----------------
Akagi | Famale | Hiryu | Famale
Nagato | Male | Mutsu | Male
Mutsu | Male | Nagato | Male
Hiryu | Famale | Soryu | Famale
Hiryu | Famale | Akagi | Famale
Soryu | Famale | Hiryu | Famale
(6 rows)
new4j_fdw
グラフデータベース Neo4j を
わざわざ PostgreSQL 経由で
SQL を使って検索する誰得な
Foreign Data Wrapper
neo4j_fdw
何故か本家 Wiki にも
登録されている・・・w
https://wiki.postgresql.org/wiki/FDW
6
自己紹介 ( こんなの作ってた )
postgres=# LISTEN HB_CL;
LISTEN
postgres=# NOTIFY HB_SV,'xxxx';;
NOTIFY
Asynchronous notification "hb_cl" with payload "Invalid data.(xxxx)"
received from server process with PID 29520.
postgres=# NOTIFY HB_SV,'0123';;
NOTIFY
Asynchronous notification "hb_cl" with payload "2 Hit / 1 Blow."
received from server process with PID 29520.
postgres=# NOTIFY HB_SV,'0813';;
NOTIFY
Asynchronous notification "hb_cl" with payload "4 Hit! Conguratulatoins!, next new game."
received from server process with PID 29520.
postgres=#
hb_worker
psql などから数当て (Hit & Blow) ができる
誰得 Background Worker Process
7
自己紹介
要するに
PostgreSQL を
無駄に使うのが好き
8
目次
PostgreSQL の概要と歴史
PostgreSQL 9.5 の新機能
BRIN
UPSERT
Row Level Security
その他の 9.5 改善
9
PostgreSQL の
概要と歴史
10
PostgreSQL の概要
MySQL と並ぶ OSS RDBMS
ライセンスは BSD ライクなもの
高度なクエリにも対応
性能面でも商用 DBMS とも遜色なし
9.0 以降はレプリケーションも対応
多種多様なデータ型サポート
非常に高い拡張性
活発な開発コミュニティ
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
17
PostgreSQL 9.5 の
新機能
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
23
BRIN
(Block Range Index)
KOF2015 PostgreSQL 9.5
25
BRIN の特徴 (1)
インデックスサイズが非常に小さい
btree
BRIN
0.000 500.000 1,000.000 1,500.000 2,000.000 2,500.000
2,142.094
0.258
timestamp 型 1 億件のインデックスサイズ
インデックスサイズ (MB)
この例では BRIN のサイズは btree のわずか 0.01%
26
BRIN の特徴 (1)
インデックス作成時間も短い
サイズの割には処理時間はそこそこかかるが、
btree インデックス生成よりはかなり短い
btree
BRIN
0 20 40 60 80 100 120
95.82
22.07
timestamp 型 1 億件のインデックス作成時間
インデックス作成時間 (s)
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
30
BRIN の特徴 (4)
値の並びと物理配置が一致する例
レコード生成時のタイムスタンプ
Serial 型
頻繁に更新が発生しない表
値の並びと物理配置の相関関係は
pg_stats ビューの correlation を参照する。
1 あるいは -1 に近ければ相関関係が強い。
0 に近ければ相関関係が弱い。
31
BRIN 向きの列
データ格納時順に単調増加するような値
・挿入時のタイムスタンプとか
・シーケンス値とか
頻繁に更新されない表の列
32
BRIN vs Partition
どちらも大規模テーブルの設計時に検討するもの
でも、目的は異なると考えたほうがいい
BRIN
巨大な 1 つの表+インデックス
巨大な表に対する範囲検索の性能向上
構築・運用は容易
パーティーション
キーにより分割された子テーブル
子テーブルの TRUNCATE が得意
パーティションキーを含む検索が有利になることもある
構築・運用は面倒・・・
KOF2015 PostgreSQL 9.5
34
UPSERT
35
UPSERT とは何か?
INSERT しようとして
制約違反になったら
代わりに UPDATE する機能
PostgreSQL では UPSERT 文ではなく
INSERT 文の拡張という形で
UPSERT を実装している
36
INSERT 文の拡張
[ WITH [ RECURSIVE ] with_query [, ...] ]
INSERT INTO table_name [ AS alias ] [ ( column_name [, ...] ) ]
{ DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }
[ ON CONFLICT [ conflict_target ] conflict_action ]
[ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]
( { column_name_index | ( expression_index ) }
[ COLLATE collation ] [ opclass ] [, ...] ) [ WHERE index_predicate ]
ON CONSTRAINT constraint_name
conflict_target の詳細
DO NOTHING
DO UPDATE SET { column_name = { expression | DEFAULT } |
( column_name [, ...] ) = ( { expression | DEFAULT } [, ...] ) |
( column_name [, ...] ) = ( sub-SELECT )
} [, ...]
[ WHERE condition ]
conflict_action の詳細
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
39
UPSERT の制約
UPSERT は「制約違反」時に
INSERT するというもの。
制約がない表には UPSERT は使えない
40
UPSERT の制約
制約がない表へは UPSERT できない
CREATE TABLE test (id int, data text);
CREATE TABLE
Table "public.test"
Column | Type | Modifiers
--------+---------+-----------
id | integer |
data | text |
INSERT INTO test VALUES (1, 'aaa'),(2, 'bbb'),(3, 'ccc');
INSERT 0 3
TABLE test;
id | data
----+------
1 | aaa
2 | bbb
3 | ccc
(3 rows)
INSERT INTO test VALUES (2, 'bbb_i')
ON CONFLICT ON CONSTRAINT test_pkey
DO UPDATE SET data = 'bbb_u';
psql:upsert-01.sql:29: ERROR: constraint "test_pkey" for table "test" does not exist
41
UPSERT の代替手段
9.4 まででも UPSERT 相当を
代替することは一応できた。
Common Table Expression(CTE)
Trigger
Application で対応
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
45
Row Level Security
KOF2015 PostgreSQL 9.5
47
RLS に関連する SQL コマンド
CREATE POLICY (新規)
ALTER POLICY (新規)
DROP POLOCY (新規)
ALTER TABLE (変更)
KOF2015 PostgreSQL 9.5
49
RLS の簡単な例
こんなロールを用意しておく
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
user_a | | {}
user_b | | {}
user_m | | {}
こんなテーブルを用意してデータ投入
CREATE TABLE test (id int primary key, name text, body text, acl text[]);
INSERT INTO test VALUES
(1, 'Project-A document', 'dummy', ARRAY['A','M']),
(2, 'Project-B document', 'dummy', ARRAY['B','M']),
(3, 'Project-A black-history', 'dummy', ARRAY['A']),
(4, 'Project list', 'dummy', ARRAY['M'])
;
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
58
その他の 9.5 改善点
59
その他の 9.5 変更点
PostgreSQL 9.5 の変更点は非常に多いので
限られた時間ではとても説明しきれませんが
その中から 10 個ばかり変更点を簡単に紹介します。
PostgreSQL 設定パラメータ
稼働統計情報ビューの変更
システムカタログの変更
SQL コマンドの追加
text/numeric ソート性能改善
ハッシュ生成の性能改善
wal 圧縮
JSON 型の改善
pg_rewind
psql の改善
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
62
PostgreSQL 設定パラメータ
チェックポイント間で保持できる WAL ファイルの量の
設定パラメータが 9.4 と 9.5 で異なる。要注意。
9.4 まで: checkpoint_segments
( 最大ログファイル数:デフォルト =3 )
↓
9.5 から: max_wal_size/max_min_size
(サイズによる設定 : デフォルト =1GB )
9.4 までの環境で使っていた checkpoint_segments の
パラメータは、 9.5 からはどう設定すればいいの?
KOF2015 PostgreSQL 9.5
64
稼働統計情報ビューの変更
PostgreSQL は実行中のさまざまな統計情報を収集し、
稼働統計情報ビュー経由や SQL 関数によって
統計情報を監視できる。
PostgreSQL 9.5 でも若干変更があった。
ビュー名・関数名 変更内容
pg_stat_ssl ビュー SSL 接続に関するビューが追加され
た。
pg_stat_get_snapshot_timestamp() 関数 統計情報のスナップショット取得時
間を返却する関数が追加された。
KOF2015 PostgreSQL 9.5
66
SQL コマンドの追加
PostgreSQL 9.5 では、
以下の SQL コマンドの追加や改善が予定されている。
INSERT(UPSERT 機能 )
SELECT(GROUP SETS, SKIP LOCKED, TABLESAMPLE)
UPDATE( 複数カラム更新の構文追加 )
ちょっと面白い機能として、カラム名を間違えたときに
カラム名を推定して HINT を出す機能が追加されている。
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
69
text/numeric ソート性能改善
text 型と numeric 型のソート性能が大きく改善された。
今までロケールを意識した比較をしていたけど、
バイトオーダーで比較するように修正したっぽい。
Improve the speed of sorting character and numeric fields
(Peter Geoghegan, Andrew Gierth, Robert Haas)
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
72
wal 圧縮機能
更新ログ (Write Ahead Log) を書き出すときに
圧縮するかどうかを決める設定値が追加された。
Full Page Write 時に書き出すサイズが小さくなる代わりに
圧縮 ( 書き出し時 )/ 伸長 ( リカバリ時など ) 時の
CPU コストが少し増大するので、利用すべきかどうかは
環境や案件に合わせて検証が必要そう。
Add configuration parameter wal_compression to control
compression of full page images stored in WAL
(Rahila Syed, Michael Paquier)
73
JSON 型の改善
PostgreSQL 9.2 からデータ型として
JSON(JSONB) 型が扱えるようになっている。
9.2 から順調に進化。 9.5 では…?
●JSON 型の導入。
●2 つの JSON 型構築関数。
●JSON 内の値を
使った条件検索は
できなかった。
●JSON 型関数・演算子の
大幅な強化。
●JSON データ型への
パスによるアクセス。
●JSON 内の値を使った
条件検索が可能に。
●JSONB 型の導入。
●検索の高速化
●独自演算子の追加
●GIN インデックス対応
9.2
9.3
9.4
74
JSON 型の改善
PostgreSQL 9.5 では
JSON/JSONB 型に関する改善が
6 項目挙げられている。
その中でも便利そうだと思えるのが、
部分更新演算子 ( || ) の追加。
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
79
まとめ
80
PostgreSQL 9.5 の主な改善点
Enterpise 用途に向けた改善
→ BRIN, Row Level Security
性能改善
→ ソート性能 , Hash 生成性能 ,
開発者向け機能の改善
→UPSERT, 各種クエリ改善 , JSONB 型改善 , psql 改善
データベース運用管理者向けの改善
→ wal 圧縮 , pg_rewind
KOF2015 PostgreSQL 9.5
82
ご清聴
ありがとう
ございました
83
Question?

More Related Content

What's hot (20)

PDF
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
Insight Technology, Inc.
 
PDF
PostgreSQL9.3新機能紹介
NTT DATA OSS Professional Services
 
PDF
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
Shigeru Hanada
 
PDF
外部データラッパによる PostgreSQL の拡張
Shigeru Hanada
 
PDF
20130203 OSS-DB Exam Silver 技術解説無料セミナー
Kazuko Itoda
 
PDF
Chugokudb study-20150131
Toshi Harada
 
PDF
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
Yuko Mori
 
PDF
Jpug study-pq 20170121
Kosuke Kida
 
PDF
perfを使ったPostgreSQLの解析(後編)
NTT DATA OSS Professional Services
 
PDF
Hackers Champloo 2016 postgresql-9.6
Toshi Harada
 
PDF
PostgreSQL10徹底解説
Masahiko Sawada
 
PDF
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
Masahiko Sawada
 
PDF
Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介
Ryuichiro Munechika
 
PDF
Chugoku db 20th-postgresql-10-pub
Toshi Harada
 
PDF
Pg14_sql_standard_function_body
kasaharatt
 
PDF
PostgreSQLの関数属性を知ろう
kasaharatt
 
PDF
Chugoku db 17th-postgresql-9.6
Toshi Harada
 
PDF
PGCon.jp 2014 jsonb-datatype-20141205
Toshi Harada
 
PDF
Chugokudb18_2
Kosuke Kida
 
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
Insight Technology, Inc.
 
PostgreSQL9.3新機能紹介
NTT DATA OSS Professional Services
 
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
Shigeru Hanada
 
外部データラッパによる PostgreSQL の拡張
Shigeru Hanada
 
20130203 OSS-DB Exam Silver 技術解説無料セミナー
Kazuko Itoda
 
Chugokudb study-20150131
Toshi Harada
 
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
Yuko Mori
 
Jpug study-pq 20170121
Kosuke Kida
 
perfを使ったPostgreSQLの解析(後編)
NTT DATA OSS Professional Services
 
Hackers Champloo 2016 postgresql-9.6
Toshi Harada
 
PostgreSQL10徹底解説
Masahiko Sawada
 
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
Masahiko Sawada
 
Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介
Ryuichiro Munechika
 
Chugoku db 20th-postgresql-10-pub
Toshi Harada
 
Pg14_sql_standard_function_body
kasaharatt
 
PostgreSQLの関数属性を知ろう
kasaharatt
 
Chugoku db 17th-postgresql-9.6
Toshi Harada
 
PGCon.jp 2014 jsonb-datatype-20141205
Toshi Harada
 
Chugokudb18_2
Kosuke Kida
 

Similar to KOF2015 PostgreSQL 9.5 (20)

PDF
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
Satoshi Nagayasu
 
PDF
PostgreSQL13 新機能紹介
Satoshi Hirata
 
PDF
Kof2016 postgresql-9.6
Toshi Harada
 
PDF
PostgreSQL 10 新機能 @オープンセミナー香川 2017
Shigeru Hanada
 
PPTX
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
NTT DATA Technology & Innovation
 
PDF
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
Shigeru Hanada
 
PDF
PostgreSQL 9.6 新機能紹介
Masahiko Sawada
 
PDF
PostgreSQLによるデータ分析ことはじめ
Ohyama Masanori
 
PDF
MyNA JPUG study 20160220-postgresql-json-datatype
Toshi Harada
 
PDF
PostgreSQL 12の話
Masahiko Sawada
 
PPTX
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
20171103 pg con-jp-lt-plpgsql
Toshi Harada
 
PDF
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
Hironobu Suzuki
 
PDF
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
Yoshiyuki Asaba
 
PPTX
Postgre SQL 9.3 新機能
Yasuo Ohgaki
 
PPTX
Ctb57 with god7
kingtomo
 
PDF
20190119 aws-study-pg-extension
Toshi Harada
 
PDF
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
kasaharatt
 
PDF
20190518 27th-chugoku db-lt-pg12
Toshi Harada
 
PDF
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Toshi Harada
 
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
Satoshi Nagayasu
 
PostgreSQL13 新機能紹介
Satoshi Hirata
 
Kof2016 postgresql-9.6
Toshi Harada
 
PostgreSQL 10 新機能 @オープンセミナー香川 2017
Shigeru Hanada
 
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
NTT DATA Technology & Innovation
 
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
Shigeru Hanada
 
PostgreSQL 9.6 新機能紹介
Masahiko Sawada
 
PostgreSQLによるデータ分析ことはじめ
Ohyama Masanori
 
MyNA JPUG study 20160220-postgresql-json-datatype
Toshi Harada
 
PostgreSQL 12の話
Masahiko Sawada
 
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
20171103 pg con-jp-lt-plpgsql
Toshi Harada
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
Hironobu Suzuki
 
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
Yoshiyuki Asaba
 
Postgre SQL 9.3 新機能
Yasuo Ohgaki
 
Ctb57 with god7
kingtomo
 
20190119 aws-study-pg-extension
Toshi Harada
 
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
kasaharatt
 
20190518 27th-chugoku db-lt-pg12
Toshi Harada
 
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Toshi Harada
 
Ad

More from Toshi Harada (20)

PDF
無駄にNeo4jを使っている日々
Toshi Harada
 
PDF
Pgunconf16 toast
Toshi Harada
 
PDF
Pgunconf14 pg13-psql
Toshi Harada
 
PDF
20190202-pgunconf-Access-Privilege-Inquiry-Functions
Toshi Harada
 
PDF
20181122 pg con-jp-lt-logrep
Toshi Harada
 
PDF
20181110 fok2018-pg-extension
Toshi Harada
 
PDF
20171106 ntt-tx-postgre sql-10
Toshi Harada
 
PDF
20171028 osc-nagaoka-postgre sql-10
Toshi Harada
 
PDF
20170819 ocd-l tthon-pgdev
Toshi Harada
 
PDF
Ntt tx-study-postgre sql-10
Toshi Harada
 
PDF
Jpug study-postgre sql-10-pub
Toshi Harada
 
PDF
Pgconf asia-201612203-pg reversi-ja
Toshi Harada
 
PDF
Pgconf asia-201612203-pg reversi
Toshi Harada
 
PDF
Chugoku db 17th-lt-kly
Toshi Harada
 
PDF
Osc shimane-2016-do-postgres-dream-of-graph-database
Toshi Harada
 
PDF
Dblt#2 do-postgres-dream-of-graph-database
Toshi Harada
 
PDF
Do postgres-dream-of-graph-database
Toshi Harada
 
PDF
20150530 pgunconf-ycsb-jsonb
Toshi Harada
 
PDF
20150530 pgunconf-pgbench-semi-structured-benchmark
Toshi Harada
 
PDF
20150520 lt-neo4j勉強会-neofj fdw
Toshi Harada
 
無駄にNeo4jを使っている日々
Toshi Harada
 
Pgunconf16 toast
Toshi Harada
 
Pgunconf14 pg13-psql
Toshi Harada
 
20190202-pgunconf-Access-Privilege-Inquiry-Functions
Toshi Harada
 
20181122 pg con-jp-lt-logrep
Toshi Harada
 
20181110 fok2018-pg-extension
Toshi Harada
 
20171106 ntt-tx-postgre sql-10
Toshi Harada
 
20171028 osc-nagaoka-postgre sql-10
Toshi Harada
 
20170819 ocd-l tthon-pgdev
Toshi Harada
 
Ntt tx-study-postgre sql-10
Toshi Harada
 
Jpug study-postgre sql-10-pub
Toshi Harada
 
Pgconf asia-201612203-pg reversi-ja
Toshi Harada
 
Pgconf asia-201612203-pg reversi
Toshi Harada
 
Chugoku db 17th-lt-kly
Toshi Harada
 
Osc shimane-2016-do-postgres-dream-of-graph-database
Toshi Harada
 
Dblt#2 do-postgres-dream-of-graph-database
Toshi Harada
 
Do postgres-dream-of-graph-database
Toshi Harada
 
20150530 pgunconf-ycsb-jsonb
Toshi Harada
 
20150530 pgunconf-pgbench-semi-structured-benchmark
Toshi Harada
 
20150520 lt-neo4j勉強会-neofj fdw
Toshi Harada
 
Ad

Recently uploaded (9)

PDF
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
PDF
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
PDF
ABC2025S LT講演「世界の窓から Androidこんにちは2025」アプリ自動生成の将来?ロボティクスの夢再び?
嶋 是一 (Yoshikazu SHIMA)
 
PDF
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
PDF
2023年版Web3技術の理想と現実
Syuhei Hiya
 
PDF
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
PDF
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
PDF
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
ABC2025S LT講演「世界の窓から Androidこんにちは2025」アプリ自動生成の将来?ロボティクスの夢再び?
嶋 是一 (Yoshikazu SHIMA)
 
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
2023年版Web3技術の理想と現実
Syuhei Hiya
 
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 

KOF2015 PostgreSQL 9.5

  • 1. 関西オープンフォーラム 2015 (2015-11-06) PostgreSQL 9.5 最新機能 ぬこ@横浜 (@nuko_yokohama)
  • 3. 3 自己紹介 ( こんなの作ってた ) SELECT data, data + ' 拾 ' FROM ksj_sample; data | ?column? ------------+---------------- 五百壱拾六 | 五百弐拾六 零 | 壱拾 参万壱百壱 | 参万壱百壱拾壱 (3 rows) SELECT data, data * ' 拾 ' FROM ksj_sample; data | ?column? ------------+-------------- 五百壱拾六 | 五千壱百六拾 零 | 零 参万壱百壱 | 参拾壱千壱拾 (3 rows) SELECT sum(data) FROM ksj_sample; sum ---------------- 参万六百壱拾七 (1 row) SELECT * FROM ksj_sample ORDER BY data; data ------------ 零 五百壱拾六 参万壱百壱 (3 rows) ksj (漢数字型) 漢数字で四則演算や 比較演算できる、誰得データ型
  • 4. 4 自己紹介 ( こんなの作ってた ) SELECT * FROM foo WHERE data = ' エバンゲリオン'; id | data ----+------------ 3 | エヴァンゲリヲン (1 row) SELECT * FROM foo WHERE data = ' センヌリティウス'; id | data ----+------ (0 rows) SELECT * FROM foo WHERE data /= ' センヌリティウス'; id | data ----+------------------ 4 | セリヌンティウス (1 row) ntext( ゆるい文字型 ) 日本語正規化比較 ゆるい比較演算子 (/=) 類似度計算で typo を許容する 誰得日本語テキスト型と 全文検索用パッチ
  • 5. 5 自己紹介 ( こんなの作ってた ) CREATE FOREIGN TABLE bar3 ( my_name text, my_gender text, follower_name text, follower_gender text) SERVER foo OPTIONS (query '{ "query":"START n=node(*) MATCH p=fm<-[]-n<-[]-fm RETURN n.name as my_name, n.gender as my_gender, fm.name as follower_name, fm.gender as follower_gender" }'); SELECT my_name, my_gender, follower_name, follower_gender FROM bar3; my_name | my_gender | follower_name | follower_gender ---------+-----------+---------------+----------------- Akagi | Famale | Hiryu | Famale Nagato | Male | Mutsu | Male Mutsu | Male | Nagato | Male Hiryu | Famale | Soryu | Famale Hiryu | Famale | Akagi | Famale Soryu | Famale | Hiryu | Famale (6 rows) new4j_fdw グラフデータベース Neo4j を わざわざ PostgreSQL 経由で SQL を使って検索する誰得な Foreign Data Wrapper neo4j_fdw 何故か本家 Wiki にも 登録されている・・・w https://wiki.postgresql.org/wiki/FDW
  • 6. 6 自己紹介 ( こんなの作ってた ) postgres=# LISTEN HB_CL; LISTEN postgres=# NOTIFY HB_SV,'xxxx';; NOTIFY Asynchronous notification "hb_cl" with payload "Invalid data.(xxxx)" received from server process with PID 29520. postgres=# NOTIFY HB_SV,'0123';; NOTIFY Asynchronous notification "hb_cl" with payload "2 Hit / 1 Blow." received from server process with PID 29520. postgres=# NOTIFY HB_SV,'0813';; NOTIFY Asynchronous notification "hb_cl" with payload "4 Hit! Conguratulatoins!, next new game." received from server process with PID 29520. postgres=# hb_worker psql などから数当て (Hit & Blow) ができる 誰得 Background Worker Process
  • 8. 8 目次 PostgreSQL の概要と歴史 PostgreSQL 9.5 の新機能 BRIN UPSERT Row Level Security その他の 9.5 改善
  • 10. 10 PostgreSQL の概要 MySQL と並ぶ OSS RDBMS ライセンスは BSD ライクなもの 高度なクエリにも対応 性能面でも商用 DBMS とも遜色なし 9.0 以降はレプリケーションも対応 多種多様なデータ型サポート 非常に高い拡張性 活発な開発コミュニティ
  • 25. 25 BRIN の特徴 (1) インデックスサイズが非常に小さい btree BRIN 0.000 500.000 1,000.000 1,500.000 2,000.000 2,500.000 2,142.094 0.258 timestamp 型 1 億件のインデックスサイズ インデックスサイズ (MB) この例では BRIN のサイズは btree のわずか 0.01%
  • 26. 26 BRIN の特徴 (1) インデックス作成時間も短い サイズの割には処理時間はそこそこかかるが、 btree インデックス生成よりはかなり短い btree BRIN 0 20 40 60 80 100 120 95.82 22.07 timestamp 型 1 億件のインデックス作成時間 インデックス作成時間 (s)
  • 30. 30 BRIN の特徴 (4) 値の並びと物理配置が一致する例 レコード生成時のタイムスタンプ Serial 型 頻繁に更新が発生しない表 値の並びと物理配置の相関関係は pg_stats ビューの correlation を参照する。 1 あるいは -1 に近ければ相関関係が強い。 0 に近ければ相関関係が弱い。
  • 32. 32 BRIN vs Partition どちらも大規模テーブルの設計時に検討するもの でも、目的は異なると考えたほうがいい BRIN 巨大な 1 つの表+インデックス 巨大な表に対する範囲検索の性能向上 構築・運用は容易 パーティーション キーにより分割された子テーブル 子テーブルの TRUNCATE が得意 パーティションキーを含む検索が有利になることもある 構築・運用は面倒・・・
  • 35. 35 UPSERT とは何か? INSERT しようとして 制約違反になったら 代わりに UPDATE する機能 PostgreSQL では UPSERT 文ではなく INSERT 文の拡張という形で UPSERT を実装している
  • 36. 36 INSERT 文の拡張 [ WITH [ RECURSIVE ] with_query [, ...] ] INSERT INTO table_name [ AS alias ] [ ( column_name [, ...] ) ] { DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query } [ ON CONFLICT [ conflict_target ] conflict_action ] [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ] ( { column_name_index | ( expression_index ) } [ COLLATE collation ] [ opclass ] [, ...] ) [ WHERE index_predicate ] ON CONSTRAINT constraint_name conflict_target の詳細 DO NOTHING DO UPDATE SET { column_name = { expression | DEFAULT } | ( column_name [, ...] ) = ( { expression | DEFAULT } [, ...] ) | ( column_name [, ...] ) = ( sub-SELECT ) } [, ...] [ WHERE condition ] conflict_action の詳細
  • 39. 39 UPSERT の制約 UPSERT は「制約違反」時に INSERT するというもの。 制約がない表には UPSERT は使えない
  • 40. 40 UPSERT の制約 制約がない表へは UPSERT できない CREATE TABLE test (id int, data text); CREATE TABLE Table "public.test" Column | Type | Modifiers --------+---------+----------- id | integer | data | text | INSERT INTO test VALUES (1, 'aaa'),(2, 'bbb'),(3, 'ccc'); INSERT 0 3 TABLE test; id | data ----+------ 1 | aaa 2 | bbb 3 | ccc (3 rows) INSERT INTO test VALUES (2, 'bbb_i') ON CONFLICT ON CONSTRAINT test_pkey DO UPDATE SET data = 'bbb_u'; psql:upsert-01.sql:29: ERROR: constraint "test_pkey" for table "test" does not exist
  • 41. 41 UPSERT の代替手段 9.4 まででも UPSERT 相当を 代替することは一応できた。 Common Table Expression(CTE) Trigger Application で対応
  • 47. 47 RLS に関連する SQL コマンド CREATE POLICY (新規) ALTER POLICY (新規) DROP POLOCY (新規) ALTER TABLE (変更)
  • 49. 49 RLS の簡単な例 こんなロールを用意しておく Role name | Attributes | Member of -----------+------------------------------------------------------------+----------- postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} user_a | | {} user_b | | {} user_m | | {} こんなテーブルを用意してデータ投入 CREATE TABLE test (id int primary key, name text, body text, acl text[]); INSERT INTO test VALUES (1, 'Project-A document', 'dummy', ARRAY['A','M']), (2, 'Project-B document', 'dummy', ARRAY['B','M']), (3, 'Project-A black-history', 'dummy', ARRAY['A']), (4, 'Project list', 'dummy', ARRAY['M']) ;
  • 59. 59 その他の 9.5 変更点 PostgreSQL 9.5 の変更点は非常に多いので 限られた時間ではとても説明しきれませんが その中から 10 個ばかり変更点を簡単に紹介します。 PostgreSQL 設定パラメータ 稼働統計情報ビューの変更 システムカタログの変更 SQL コマンドの追加 text/numeric ソート性能改善 ハッシュ生成の性能改善 wal 圧縮 JSON 型の改善 pg_rewind psql の改善
  • 62. 62 PostgreSQL 設定パラメータ チェックポイント間で保持できる WAL ファイルの量の 設定パラメータが 9.4 と 9.5 で異なる。要注意。 9.4 まで: checkpoint_segments ( 最大ログファイル数:デフォルト =3 ) ↓ 9.5 から: max_wal_size/max_min_size (サイズによる設定 : デフォルト =1GB ) 9.4 までの環境で使っていた checkpoint_segments の パラメータは、 9.5 からはどう設定すればいいの?
  • 64. 64 稼働統計情報ビューの変更 PostgreSQL は実行中のさまざまな統計情報を収集し、 稼働統計情報ビュー経由や SQL 関数によって 統計情報を監視できる。 PostgreSQL 9.5 でも若干変更があった。 ビュー名・関数名 変更内容 pg_stat_ssl ビュー SSL 接続に関するビューが追加され た。 pg_stat_get_snapshot_timestamp() 関数 統計情報のスナップショット取得時 間を返却する関数が追加された。
  • 66. 66 SQL コマンドの追加 PostgreSQL 9.5 では、 以下の SQL コマンドの追加や改善が予定されている。 INSERT(UPSERT 機能 ) SELECT(GROUP SETS, SKIP LOCKED, TABLESAMPLE) UPDATE( 複数カラム更新の構文追加 ) ちょっと面白い機能として、カラム名を間違えたときに カラム名を推定して HINT を出す機能が追加されている。
  • 69. 69 text/numeric ソート性能改善 text 型と numeric 型のソート性能が大きく改善された。 今までロケールを意識した比較をしていたけど、 バイトオーダーで比較するように修正したっぽい。 Improve the speed of sorting character and numeric fields (Peter Geoghegan, Andrew Gierth, Robert Haas)
  • 72. 72 wal 圧縮機能 更新ログ (Write Ahead Log) を書き出すときに 圧縮するかどうかを決める設定値が追加された。 Full Page Write 時に書き出すサイズが小さくなる代わりに 圧縮 ( 書き出し時 )/ 伸長 ( リカバリ時など ) 時の CPU コストが少し増大するので、利用すべきかどうかは 環境や案件に合わせて検証が必要そう。 Add configuration parameter wal_compression to control compression of full page images stored in WAL (Rahila Syed, Michael Paquier)
  • 73. 73 JSON 型の改善 PostgreSQL 9.2 からデータ型として JSON(JSONB) 型が扱えるようになっている。 9.2 から順調に進化。 9.5 では…? ●JSON 型の導入。 ●2 つの JSON 型構築関数。 ●JSON 内の値を 使った条件検索は できなかった。 ●JSON 型関数・演算子の 大幅な強化。 ●JSON データ型への パスによるアクセス。 ●JSON 内の値を使った 条件検索が可能に。 ●JSONB 型の導入。 ●検索の高速化 ●独自演算子の追加 ●GIN インデックス対応 9.2 9.3 9.4
  • 74. 74 JSON 型の改善 PostgreSQL 9.5 では JSON/JSONB 型に関する改善が 6 項目挙げられている。 その中でも便利そうだと思えるのが、 部分更新演算子 ( || ) の追加。
  • 80. 80 PostgreSQL 9.5 の主な改善点 Enterpise 用途に向けた改善 → BRIN, Row Level Security 性能改善 → ソート性能 , Hash 生成性能 , 開発者向け機能の改善 →UPSERT, 各種クエリ改善 , JSONB 型改善 , psql 改善 データベース運用管理者向けの改善 → wal 圧縮 , pg_rewind