知って得するwebで便利なpostgre sqlの3つの機能
TRANSCRIPT
![Page 1: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/1.jpg)
知って得するWebで便利なPostgreSQLの3つの機能
オープンソースカンファレンス2015@新潟
![Page 2: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/2.jpg)
What is it?
データベースは何を基準に選んでますか?
![Page 3: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/3.jpg)
What is it?
RDBを制する者は
データ層を制する
と言っても過言ではありません
![Page 4: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/4.jpg)
What is it?そして
PostgreSQLを使えば開発で楽をする
ことが出来ます
![Page 5: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/5.jpg)
What is it?
今日はそんなPostgreSQLの
Tipsをご紹介します
![Page 6: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/6.jpg)
あじぇんだ
1 自己紹介 2 Window関数とマテビュー 3 外部データラッパ(FDW) 4 JSON型とJSONB型 5 まとめ
![Page 7: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/7.jpg)
あじぇんだ
1 自己紹介 2 Window関数とマテビュー 3 外部データラッパ(FDW) 4 JSON型とJSONB型 5 まとめ
![Page 8: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/8.jpg)
自己紹介名前:曽根 壮大(そね たけとも) 年齢:30歳(三人の子供がいます) 職業:Webエンジニア
所属:日本PostgreSQLユーザ会
中国支部 支部長
技術的にはLL系言語とかRDBが好きです
![Page 10: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/10.jpg)
MySQL使いが知るべき
PostgreSQLとの違いと変わらない一つのこと http://soudai1025.blogspot.jp/2015/08/mysql2postgresql.html
![Page 11: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/11.jpg)
![Page 12: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/12.jpg)
あじぇんだ
1 自己紹介 2 Window関数とマテビュー 3 外部データラッパ(FDW) 4 JSON型とJSONB型 5 まとめ
![Page 13: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/13.jpg)
Window関数とマテビュー
Window関数とマテビュー
![Page 14: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/14.jpg)
Window関数とマテビュー
素早く帳票を作る
![Page 15: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/15.jpg)
Window関数とマテビュー
Window関数
![Page 16: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/16.jpg)
Window関数とマテビュー
Window関数
ウィンドウ関数は現在の行に何らの関係するテーブル行の一纏まり全般の計算を行う。
![Page 17: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/17.jpg)
商品名 売上 売上日プログラマのためのSQL 4200 2015-08-01"内部構造から学ぶ 3600 2015-08-30ソフトウェアデザイン 1300 2015-08-02SQL実践入門 2580 2015-08-03
理論から学ぶデータベース 3110 2015-08-04SQL逆引き大全363の極意 2600 2015-08-30プログラマのためのSQL 4200 2015-08-30
SQL実践入門 2580 2015-08-30理論から学ぶデータベース 3110 2015-08-05
SQL実践入門 2580 2015-08-30リーダブルコード 2592 2015-08-30リーダブルコード 2592 2015-08-30
データベース・リファクタ 3000 2015-08-30達人に学ぶDB設計 2800 2015-08-30
: :
: :
: :
※実務では編は正規化するべき
![Page 18: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/18.jpg)
Window関数とマテビュー
まずは日別に集計する
![Page 19: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/19.jpg)
実際のSQL
SELECT to_char( sum(“売上"),'FM999,999,999'
) AS "日別売上"
, "売上日"
FROM "売上表"
GROUP BY “売上日" ORDER BY "売上日"
![Page 20: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/20.jpg)
実際のSQL
SELECT to_char( sum(“売上"),'FM999,999,999'
) AS "日別売上"
, "売上日"
FROM "売上表"
GROUP BY “売上日" ORDER BY "売上日"
![Page 21: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/21.jpg)
実際のSQL
SELECT to_char( sum(“売上"),'FM999,999,999'
) AS "日別売上"
, "売上日"
FROM "売上表"
GROUP BY “売上日" ORDER BY "売上日"
3桁区切りでカンマを入れる
![Page 22: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/22.jpg)
日別売上 売上日2,643,552 2015-08-012,650,368 2015-08-022,601,180 2015-08-032,598,392 2015-08-042,635,064 2015-08-052,650,852 2015-08-062,642,568 2015-08-072,613,876 2015-08-082,658,504 2015-08-092,637,376 2015-08-102,617,840 2015-08-112,596,896 2015-08-122,669,644 2015-08-132,623,568 2015-08-14
: :
: :
![Page 23: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/23.jpg)
Window関数とマテビュー
前日との差分を出したい
![Page 24: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/24.jpg)
Window関数とマテビュー
前日との差分を出したい ↓
lag()を使って集計する
![Page 25: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/25.jpg)
実際のSQL
SELECT
*
, lag("日別売上") OVER (ORDER BY "売上日")AS 前日売上
FROM
(SELECT
to_char(sum("売上"),'FM999,999,999') AS "日別売上"
, "売上日"
FROM "売上表"
GROUP BY "売上日") AS "集計"
![Page 26: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/26.jpg)
実際のSQL
SELECT
*
, lag("日別売上") OVER (ORDER BY "売上日")AS 前日売上
FROM
(SELECT
to_char(sum("売上"),'FM999,999,999') AS "日別売上"
, "売上日"
FROM "売上表"
GROUP BY "売上日") AS "集計"
![Page 27: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/27.jpg)
実際のSQL
SELECT
*
, lag("日別売上") OVER (ORDER BY "売上日")AS 前日売上
FROM
(SELECT
to_char(sum("売上"),'FM999,999,999') AS "日別売上"
, "売上日"
FROM "売上表"
GROUP BY "売上日") AS "集計"
先ほどのクエリをサブクエリにする
![Page 28: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/28.jpg)
実際のSQL
SELECT
*
, lag("日別売上") OVER (ORDER BY "売上日")AS 前日売上
FROM
(SELECT
to_char(sum("売上"),'FM999,999,999') AS "日別売上"
, "売上日"
FROM "売上表"
GROUP BY "売上日") AS "集計"
Window関数の対象を指定
先ほどのクエリをサブクエリにする
![Page 29: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/29.jpg)
実際のSQL
SELECT
*
, lag("日別売上") OVER (ORDER BY "売上日")AS 前日売上
FROM
(SELECT
to_char(sum("売上"),'FM999,999,999') AS "日別売上"
, "売上日"
FROM "売上表"
GROUP BY "売上日") AS "集計"
Window関数の対象を指定
先ほどのクエリをサブクエリにする
前行の取得するカラムを指定
![Page 30: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/30.jpg)
日別売上 売上日 前日売上2,643,552 2015-08-01 NULL2,650,368 2015-08-02 2,643,5522,601,180 2015-08-03 2,650,3682,598,392 2015-08-04 2,601,1802,635,064 2015-08-05 2,598,3922,650,852 2015-08-06 2,635,0642,642,568 2015-08-07 2,650,8522,613,876 2015-08-08 2,642,5682,658,504 2015-08-09 2,613,8762,637,376 2015-08-10 2,658,5042,617,840 2015-08-11 2,637,3762,596,896 2015-08-12 2,617,8402,669,644 2015-08-13 2,596,8962,623,568 2015-08-14 2,669,644
: :
: :
: :
![Page 31: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/31.jpg)
日別売上 売上日 前日売上2,643,552 2015-08-01 NULL2,650,368 2015-08-02 2,643,5522,601,180 2015-08-03 2,650,3682,598,392 2015-08-04 2,601,1802,635,064 2015-08-05 2,598,3922,650,852 2015-08-06 2,635,0642,642,568 2015-08-07 2,650,8522,613,876 2015-08-08 2,642,5682,658,504 2015-08-09 2,613,8762,637,376 2015-08-10 2,658,5042,617,840 2015-08-11 2,637,3762,596,896 2015-08-12 2,617,8402,669,644 2015-08-13 2,596,8962,623,568 2015-08-14 2,669,644
: :
: :
: :
前行が無いのでNULL
![Page 32: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/32.jpg)
Window関数とマテビュー
翌日の場合は?
![Page 33: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/33.jpg)
Window関数とマテビュー
翌日の場合は? ↓
lead()を使って集計出来る
![Page 34: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/34.jpg)
関数 説明row_number() 行番号
rank() ランキング (同率で番号を飛ばす)
dense_rank() ランキング (同率で番号を飛ばさない)
percent_rank() ランキング (%で表示) : (rank - 1) / (全行数 - 1)
cume_dist() percent_rank に類似 : (現在の行の位置) / (全行数)
ntile(N) ランキング (1..N に分割)
lag(value, offset, default) ソート状態での前の行の値
lead(value, offset, default) ソート状態での後の行の値
first_value(value) 最初の値
last_value(value) 最後の値
nth_value(value, N) N番目の値 (1から数える)
![Page 35: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/35.jpg)
Window関数とマテビュー
データが多くて遅い
![Page 36: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/36.jpg)
Window関数とマテビュー
マテリアライズドビュー
![Page 37: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/37.jpg)
Window関数とマテビュー
マテリアライズドビュー
実体の存在するView。 参照したクエリ結果を保存するため、参照元を更新した際はマテビューの更新も必要になる。
※ただしPostgreSQL 9.3からの機能
![Page 38: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/38.jpg)
Window関数とマテビュー
クエリ結果を実体化する
![Page 39: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/39.jpg)
Window関数とマテビュー
クエリ結果を実体化する ↓ 高速化
![Page 40: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/40.jpg)
Window関数とマテビュー
マテビューは銀の弾丸ではない
![Page 41: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/41.jpg)
Window関数とマテビュー
マテビューの問題点
・リフレッシュ管理が必要(自動更新しない) ※ただし、9.4から自動更新が可能 ・普通のテーブル同様に表領域を消費する ・リフレッシュはそれなりにリソースを使う
![Page 42: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/42.jpg)
Window関数とマテビュー
更新が多いとボトルネックになる
![Page 43: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/43.jpg)
Window関数とマテビュー
まとめ
![Page 44: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/44.jpg)
Window関数とマテビュー
まとめ
![Page 45: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/45.jpg)
Window関数とマテビュー
まとめ
1 機能を覚えると実装が楽に
![Page 46: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/46.jpg)
Window関数とマテビュー
まとめ
1 機能を覚えると実装が楽に 2 拡張を見据えた設計が大事
![Page 47: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/47.jpg)
Window関数とマテビュー
まとめ
1 機能を覚えると実装が楽に 2 拡張を見据えた設計が大事 3 要件に合わせて選択肢を選ぶ
![Page 48: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/48.jpg)
あじぇんだ
1 自己紹介 2 Window関数とマテビュー 3 外部データラッパ(FDW) 4 JSON型とJSONB型 5 まとめ
![Page 49: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/49.jpg)
外部データラッパ(FDW)
Window関数が便利!!
![Page 50: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/50.jpg)
外部データラッパ(FDW)
Window関数が便利!! ↓
でも弊社、MySQL(́・ω・`)
![Page 51: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/51.jpg)
外部データラッパ(FDW)
でも大丈夫!!
![Page 52: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/52.jpg)
外部データラッパ(FDW)
FDWを使えばMySQLと繋がる
![Page 53: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/53.jpg)
FDWとは
外部テーブルを作成するための機能 (外部のデータをtableにする)
![Page 54: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/54.jpg)
FDWとは
外部データにテーブルと同様に SQL文でアクセスできる
![Page 55: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/55.jpg)
FDWとは
• WHEREやORDER BYが使える • GROUP BYなどの集合関数も使える • JOINなど、他tableと関連付け出来る • 更新や削除も出来る(ただし9.3から)
![Page 56: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/56.jpg)
FDWとは
外部データ ↓
DB、CSV、JSON、WebAPIなんでも良い
![Page 57: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/57.jpg)
FDWとは
PostgreSQL to
PostgreSQL
![Page 58: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/58.jpg)
FDWとは
MySQL to
PostgreSQL
![Page 59: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/59.jpg)
FDWとは
MongoDB to
PostgreSQL
![Page 60: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/60.jpg)
FDWとは
Git to
PostgreSQL
![Page 61: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/61.jpg)
SQL Databases Wrappers • postgres_fdw • oracle_fdw • mysql_fdw • odbc_fdw • jdbc_fdw
![Page 62: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/62.jpg)
NoSQL Databases Wrappers• couchdb_fdw • MonetDB FDW • mongo_fdw • redis_fdw • Neo4j fdw • Tycoon FDW
![Page 63: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/63.jpg)
Others• git_fdw • ldap_fdw • IMAP_fdw • s3_fdw • www_fdw • OS_fdw
![Page 64: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/64.jpg)
FDWとは
その他に既に多くの実装がある
![Page 65: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/65.jpg)
SQL Databases Wrappers • postgres_fdw • oracle_fdw • mysql_fdw • odbc_fdw • jdbc_fdw
![Page 66: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/66.jpg)
FDWを使うMySQLPostgreSQL
![Page 67: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/67.jpg)
FDWを使うMySQLPostgreSQL
TABLE
![Page 68: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/68.jpg)
FDWを使う
EXTENSION
MySQLPostgreSQL
TABLE
![Page 69: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/69.jpg)
FDWを使う
EXTENSION
MySQLPostgreSQL
TABLE
mysql_fdwをインストールする
![Page 70: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/70.jpg)
FDWを使う
server
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
![Page 71: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/71.jpg)
FDWを使う
server
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
MySQLの接続先を設定する
MySQLの接続ユーザを設定する
![Page 72: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/72.jpg)
FDWを使う
server
FOREIGN TABLE
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
![Page 73: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/73.jpg)
FDWを使う
server
FOREIGN TABLE
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
PostgreSQLの外部tableを作成する
![Page 74: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/74.jpg)
FDWを使う
server
FOREIGN TABLE
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
Client
![Page 75: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/75.jpg)
FDWを使う
server
FOREIGN TABLE
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
ClientSQLで問い合わせ
![Page 76: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/76.jpg)
FDWを使う
server
FOREIGN TABLE
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
ClientSQLで問い合わせ
外部tableにアクセス
![Page 77: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/77.jpg)
FDWを使う
server
FOREIGN TABLE
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
Client
アクセス先を確認
![Page 78: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/78.jpg)
FDWを使う
server
FOREIGN TABLE
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
Client
MySQLにクエリを投げる
![Page 79: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/79.jpg)
FDWを使う
server
FOREIGN TABLE
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
Client
実行結果を取得
![Page 80: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/80.jpg)
FDWを使う
server
FOREIGN TABLE
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
Client実行結果を表示
![Page 81: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/81.jpg)
FDWを使う
server
FOREIGN TABLE
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
Client
![Page 82: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/82.jpg)
FDWを使う
既存環境の集計作業が大変 ↓
そのままPostgreSQLに委託出来る
![Page 83: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/83.jpg)
あじぇんだ
1 自己紹介 2 Window関数とマテビュー 3 外部データラッパ(FDW) 4 JSON型とJSONB型 5 まとめ
![Page 84: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/84.jpg)
JSON型とJSONB型
PostgreSQLで今一番アツい機能
※そーだい調べ
![Page 85: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/85.jpg)
JSON型とJSONB型
ドキュメント指向
![Page 86: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/86.jpg)
JSON型とJSONB型
ドキュメント指向
“name” : “hoge” “role1” : 開発 “role2” : 運用 “age” : 30
“name” : “fuga” “role1” : 営業 “from” : 広島 “age” : 25
“name” : “bar” “role1” : 総務
![Page 87: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/87.jpg)
JSON型とJSONB型
ドキュメント指向
“name” : “hoge” “role1” : 開発 “role2” : 運用 “age” : 30
“name” : “fuga” “role1” : 営業 “from” : 広島 “age” : 25
“name” : “bar” “role1” : 総務
それぞれが独立したドキュメント ドキュメントにはユニークなIDでアクセスが可能
![Page 88: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/88.jpg)
JSON型とJSONB型
ドキュメント指向
“name” : “hoge” “role1” : 開発 “role2” : 運用 “age” : 30
“name” : “fuga” “role1” : 営業 “from” : 広島 “age” : 25
“name” : “bar” “role1” : 総務
それぞれが独立しているので 自由な変更が可能
![Page 89: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/89.jpg)
id name properties
1 test1 {“name”:”hoge",“age”:30,”role”:1}
2 test2 {“name”:”fuga",“age”:21,”role”:1}
3 test3 {“name”:”bar”,“age”:22,”role”:1}
4 test4 {“name”:”foo”,“age”:60,”role”:2}
5 test5 {“name”:toto,“age”:16,”role”:2}
6 test6 {“name”:”titi”,“age”:30,”role”:2}
7 test7 {“name”:”tata”,“age”:30,”role”:3}
: :
: :
: :
![Page 90: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/90.jpg)
JSON型とJSONB型
値を指定した検索
![Page 91: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/91.jpg)
実際のSQL
SELECT
*
FROM
demo_json
WHERE
properties->>”name” = “hoge”
![Page 92: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/92.jpg)
実際のSQL
SELECT
*
FROM
demo_json
WHERE
properties->>”name” = “hoge”JSONの値を指定して直接検索出来る
![Page 93: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/93.jpg)
JSON型とJSONB型
INDEXを指定する
![Page 94: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/94.jpg)
実際のSQL
CREATE INDEX
demo_json_index
ON
demo_json
(properties->>'name');
![Page 95: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/95.jpg)
実際のSQL
CREATE INDEX
demo_json_index
ON
demo_json
(properties->>'name');
INDEX名
![Page 96: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/96.jpg)
実際のSQL
CREATE INDEX
demo_json_index
ON
demo_json
(properties->>'name');
INDEX名
対象テーブル
![Page 97: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/97.jpg)
実際のSQL
CREATE INDEX
demo_json_index
ON
demo_json
(properties->>'name');
INDEX名
対象テーブル
式を指定する
![Page 98: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/98.jpg)
JSON型とJSONB型
銀の弾丸ではない(本日二度目
![Page 99: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/99.jpg)
JSON型とJSONB型
制約を設けれない
![Page 100: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/100.jpg)
JSON型とJSONB型
制約を設けれない ↓
外部キーや一意制約がない
![Page 101: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/101.jpg)
JSON型とJSONB型
データ登録のトレードオフ
![Page 102: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/102.jpg)
JSON型とJSONB型
データ登録のトレードオフ ↓
自由な保存 ⇔ 正しく守る
![Page 103: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/103.jpg)
JSON型とJSONB型
クエリに対する制限
![Page 104: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/104.jpg)
JSON型とJSONB型
クエリに対する制限 ↓
集約関数などが使えない
![Page 105: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/105.jpg)
JSON型とJSONB型
要件に合わせて選択肢を選ぶ
![Page 106: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/106.jpg)
JSON型とJSONB型
まとめ
1 値で検索が出来る 2 値の検索でINDEXが使える 3 要件に合わせて選択肢を選ぶ
![Page 107: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/107.jpg)
あじぇんだ
1 自己紹介 2 Window関数とマテビュー 3 外部データラッパ(FDW) 4 JSON型とJSONB型 5 まとめ
![Page 108: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/108.jpg)
まとめ
Webアプリケーションの複雑化
![Page 109: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/109.jpg)
まとめ
Webアプリケーションの複雑化 ↓
データ構造も複雑化
![Page 110: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/110.jpg)
まとめ
柔軟で高速な検索が必要
![Page 111: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/111.jpg)
まとめ
柔軟で高速な検索が必要 ↓
運用では正しいデータの保存も重要
![Page 112: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/112.jpg)
まとめ
データベースを知ることが大事
![Page 113: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/113.jpg)
まとめ
PostgreSQLは
Webにもマッチします
![Page 114: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/114.jpg)
まとめ
スタートアップに
![Page 115: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/115.jpg)
まとめ
リプレースに
![Page 116: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/116.jpg)
まとめ
既存拡張に
![Page 117: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/117.jpg)
まとめ
PostgreSQL使ってみませんか?
![Page 118: 知って得するWebで便利なpostgre sqlの3つの機能](https://reader030.vdocuments.net/reader030/viewer/2022020714/587065751a28ab48378b4e05/html5/thumbnails/118.jpg)
ご静聴ありがとうございました。