SlideShare a Scribd company logo
1 of 14
Download to read offline
PostgreSQL の
イケてるテク 7選
2019/02/02
第10回 PostgreSQLアンカンファレンス
第10回PostgreSQL アンカンファレンス 「PostgreSQL のイケてるテク7選」
1自己紹介
Tomoya Kawanishi a.k.a. @cuzic
元 関西電力勤務
全社的に標準DBとして PostgreSQL を選定。導入を推進。
エネチェンジ株式会社 チーフエンジニア
電力会社、ガス会社を切り替えるなら、エネチェンジ経由で!
一般家庭も!法人も!
WEBアプリケーション開発が主。
Ruby関西の中の人
発表者として登壇くださる方、あとで声かけください。
大手町.rb の中の人
毎月 大手町.rb の開催を予定
東京駅、各線大手町駅から直結!
Ruby の初級者がメインターゲット
第10回PostgreSQL アンカンファレンス 「PostgreSQL のイケてるテク7選」
今日のテーマ
私は DB エンジニアではないので、
利用者側の内容ばかりになっています。
Timestamp の範囲の表現
Coalesce 関数とTimestamp型の 'infinity'
tstzrange
共通テーブル式(Common Table Expressions)
VALUES を使った subquery
ラテラルジョイン 、json_array_elements、WITH
ORDINALITY AS
豊富な集約関数
統計処理
ltree 型
2
第10回PostgreSQL アンカンファレンス 「PostgreSQL のイケてるテク7選」
Timestamp の範囲 1/3
キャンペーン情報をDBで管理
2月1日~2月28日までのキャンペーンなどがよくある
単純な実装例
有効なキャンペーンを取り出す SQL
ちょっと読みにくい
3
id : キャンペーンの ID
start_at : timestamp 型
end_at : timestamp 型
SELECT * FROM campaigns
WHERE (start_at IS NULL OR start_at < now() ) AND
(end_at IS NULL OR now() < end_at);
第10回PostgreSQL アンカンファレンス 「PostgreSQL のイケてるテク7選」
Timestamp の範囲 2/3
OR と AND の組合せは、脳への負担が重い
AND だけだと理解しやすい
coalesce : 第1引数が null のとき、第2引数の値を返す
デフォルト値を設定できる関数と思うと理解しやすい
自動的に型変換される。 '-infinity'::timestamptz と同じ
'-infinity' は無限の過去。 'infinity' は無限の未来
4
SELECT * FROM campaigns
WHERE (start_at IS NULL OR start_at < now() ) AND
(end_at IS NULL OR now() < end_at);
SELECT * FROM campaigns
WHERE coalesce(start_at, '-infinity') < now() AND
now() < coalesce(end_at, 'infinity')
第10回PostgreSQL アンカンファレンス 「PostgreSQL のイケてるテク7選」
Timestamp の範囲 3/3
tstzrange で日時の範囲型を1つの列で表現できる
[, ] で閉区間(境界を含む)、 (, ) で開区間(境界を含まない)
@> で、簡潔に contains の判定が可能
gist の index 設定も可能で SQL も高速化可能
5
SELECT * FROM campaigns
WHERE duration @> now();
id : キャンペーンの ID
duration : tstzrange 型
INSERT INTO campaigns ( id, duration )
VALUES (1, '[-infinity, infinity]'), (2, '[-infinity, 2019-02-01)');
第10回PostgreSQL アンカンファレンス 「PostgreSQL のイケてるテク7選」
共通テーブル式(Common Table Expressions) 6
WITH
provider_order_count AS (
SELECT
provider_id,
count(1) AS count
FROM
orders
GROUP BY provider_id
HAVING count(1) > 1000
)
SELECT
b.key, count
FROM
provider_order_count AS a,
providers AS b
WHERE
a.provider_id = b.id
ここに参加してる人は
全員熟知してる?
私は最初かなり感動しました。
上から下に処理順に書ける、
読める。
これまで、FROM のところに
書いていたのと比べ
格段に維持運用しやすい
第10回PostgreSQL アンカンファレンス 「PostgreSQL のイケてるテク7選」
LATERAL ジョイン、json_array_elements、
WITH ORDILALITY
LATERAL
SQL 界の forループ
左側の各行に対して
右側のサブクエリを
実行し、ジョインする
この場合、LATERAL は
省略可
(後続が関数だから)
json_array_elements
JSON の配列を
行として展開できる
WITH ORDINALITY
順位を一緒に返す
->>
JSON オブジェクトの
値を取り出す
7
WITH
recent_histories AS (
SELECT * FROM
try_histories
ORDER BY id DESC
),
chosen_plans_json AS (
SELECT
id, t.chosen_plan, t.idx
FROM
recent_histories AS rh,
LATERAL
json_array_elements(rh.chosen_plans)
WITH ORDINALITY AS t(chosen_plan, idx)
),
SELECT
id, idx,
chosen_plan->>'provider_key' AS provider_key,
chosen_plan->>'plan_key' AS plan_key,
chosen_plan->>'area_key' AS area_key
FROM
chosen_plans_json;
第10回PostgreSQL アンカンファレンス 「PostgreSQL のイケてるテク7選」
CTE のサブクエリとして VALUES を書く
CTE のサブクエリ
として VALUES も
書ける
定数を SQL 内で
書ける
処理を AP サーバから
DB サーバに移せる
8
WITH
order_type_count AS (
SELECT
type_id,
count(1) AS count
FROM
orders
GROUP BY type_id
),
contract_types(type_id, name) AS (
VALUES (1, 'electric_gas'),
(2, 'gas'), (3, 'electric')
)
SELECT
b.name, a.count
FROM
order_type_count AS a,
contract_types AS b
WHERE
a.type_id =
b.type_id
第10回PostgreSQL アンカンファレンス 「PostgreSQL のイケてるテク7選」
豊富な集約関数、ウィンドウ関数
集約関数
array_agg : 配列として集約
bool_and: 全部の値が true だと true。1つでも false だと false
bool_or :全部の値が false だと false。
json(b)_agg : JSON の配列として集約
json_object_agg : JSON オブジェクトとして集約
string_agg : 文字列を区切り文字で連結して集約
FILTER 節
いままでの複雑な SQL が FILTER を使うととてもカンタンに書ける!
pivot テーブル的なタテのものを横にしたいときとかにベンリ
9
SELECT
count(1) FILTER(WHERE type_id = 1) AS electric_gas_count,
count(1) FILTER(WHERE type_id = 2) AS gas_count,
count(1) FILTER(WHERE type_id = 3) AS electric_count
FROM
orders;
第10回PostgreSQL アンカンファレンス 「PostgreSQL のイケてるテク7選」
PostgreSQL で統計処理 10
SELECT
COUNT(1), -- カウント
AVG(price), MIN(price), MAX(price), -- 平均、最小、最大
-- メディアン(中央値)
PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY price) AS median_price,
-- 標準偏差
STDDEV_SAMP(price) AS stddev_price,
-- 25% パーセンタイル
PERCENTILE_CONT(0.25) WITHIN GROUP(ORDER BY price) AS first_quartile,
-- 75% パーセンタイル
PERCENTILE_CONT(0.75) WITHIN GROUP(ORDER BY price) AS third_quartile,
-- 相関係数
CORR(price, room_number) AS corr_rm,
CORR(price, lower_status_percentage) AS corr_lstat,
CORR(price, student_teacher_ratio) AS corr_ptratio
FROM
boston_housing_data;
PostgreSQL だけで、さまざまな統計処理が可能
標準偏差、メディアン、パーセンタイル、相関係数
パーセンタイルを計算するときは並び順を WITHIN GROUP で指定する
第10回PostgreSQL アンカンファレンス 「PostgreSQL のイケてるテク7選」
ltree 型
PostgreSQL 標準拡張にある型の1つ
階層的なラベルデータを表現可能
@>、<@
包含関係
~
経由する場合
gist の index
の作成もできる
11
CREATE EXTENSION ltree;
Top
Top.Science
Top.Science.Astronomy
Top.Science.Astronomy.Astrophysics
Top.Science.Astronomy.Cosmology
Top.Hobbies
Top.Hobbies.Amateurs_Astronomy
Top.Collections
Top.Collections.Pictures
Top.Collections.Pictures.Astronomy
Top.Collections.Pictures.Astronomy.Stars
Top.Collections.Pictures.Astronomy.Galaxies
Top.Collections.Pictures.Astronomy.Astronauts
-- Top.Science の子孫のみを抽出する SQL
SELECT * FROM "ltree_tests" WHERE (path <@ 'Top.Science')
-- Astronomy を経由する場合を抽出する SQL
SELECT * FROM "ltree_tests" WHERE (path ~ '*.Astronomy.*')
第10回PostgreSQL アンカンファレンス 「PostgreSQL のイケてるテク7選」
おわりに
私自身の仕事はDB専門ではなく
WEBアプリケーション開発がメインです。
そのため、DBを利用する側に特化して
個人的にイケてると思う PostgreSQL の機能を
いくつか紹介しました。
みなさんの参考になれば、さいわいです。
12
ご清聴ありがとう
ございました

More Related Content

What's hot

pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWayTakayuki Shimizukawa
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!Tetsutaro Watanabe
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みMasahiro Sakai
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)NTT DATA Technology & Innovation
 
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)NTT DATA Technology & Innovation
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編Miki Shimogai
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターンSoudai Sone
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれKumazaki Hiroki
 
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)NTT DATA Technology & Innovation
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
AWS で Presto を徹底的に使いこなすワザ
AWS で Presto を徹底的に使いこなすワザAWS で Presto を徹底的に使いこなすワザ
AWS で Presto を徹底的に使いこなすワザNoritaka Sekiyama
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめPostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめOhyama Masanori
 

What's hot (20)

pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
使ってみませんか?pg_hint_plan
使ってみませんか?pg_hint_plan使ってみませんか?pg_hint_plan
使ってみませんか?pg_hint_plan
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay
 
PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
 
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編
 
PostgreSQL失敗談
PostgreSQL失敗談PostgreSQL失敗談
PostgreSQL失敗談
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
AWS で Presto を徹底的に使いこなすワザ
AWS で Presto を徹底的に使いこなすワザAWS で Presto を徹底的に使いこなすワザ
AWS で Presto を徹底的に使いこなすワザ
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめPostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめ
 

Similar to PostgreSQL のイケてるテクニック7選

20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsqlToshi Harada
 
20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_TokyoKohei KaiGai
 
SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】
SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】
SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】Kohei KaiGai
 
Oss x user_meeting_6_postgres
Oss x user_meeting_6_postgresOss x user_meeting_6_postgres
Oss x user_meeting_6_postgresKosuke Kida
 
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeOsc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeToshi Harada
 
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告Amazon Web Services Japan
 
A Tour of PostgreSQL
A Tour of PostgreSQLA Tour of PostgreSQL
A Tour of PostgreSQLEDB
 
BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門Yohei Sasaki
 
外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張Shigeru Hanada
 
Webで役立つRDBの使い方
Webで役立つRDBの使い方Webで役立つRDBの使い方
Webで役立つRDBの使い方Soudai Sone
 
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...NTT DATA Technology & Innovation
 
20190925_DBTS_PGStrom
20190925_DBTS_PGStrom20190925_DBTS_PGStrom
20190925_DBTS_PGStromKohei KaiGai
 
Postgre sql9.3新機能紹介
Postgre sql9.3新機能紹介Postgre sql9.3新機能紹介
Postgre sql9.3新機能紹介Daichi Egawa
 
第51回NDS PostgreSQLのデータ型 #nds51
第51回NDS PostgreSQLのデータ型 #nds51第51回NDS PostgreSQLのデータ型 #nds51
第51回NDS PostgreSQLのデータ型 #nds51civicpg
 
20171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-1020171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-10Toshi Harada
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説Masahiko Sawada
 
PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017Shigeru Hanada
 

Similar to PostgreSQL のイケてるテクニック7選 (20)

20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql
 
Chugokudb18_2
Chugokudb18_2Chugokudb18_2
Chugokudb18_2
 
20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo
 
SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】
SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】
SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
 
Oss x user_meeting_6_postgres
Oss x user_meeting_6_postgresOss x user_meeting_6_postgres
Oss x user_meeting_6_postgres
 
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeOsc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatype
 
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
 
A Tour of PostgreSQL
A Tour of PostgreSQLA Tour of PostgreSQL
A Tour of PostgreSQL
 
BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門
 
外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張
 
Webで役立つRDBの使い方
Webで役立つRDBの使い方Webで役立つRDBの使い方
Webで役立つRDBの使い方
 
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
 
20190925_DBTS_PGStrom
20190925_DBTS_PGStrom20190925_DBTS_PGStrom
20190925_DBTS_PGStrom
 
Postgre sql9.3新機能紹介
Postgre sql9.3新機能紹介Postgre sql9.3新機能紹介
Postgre sql9.3新機能紹介
 
第51回NDS PostgreSQLのデータ型 #nds51
第51回NDS PostgreSQLのデータ型 #nds51第51回NDS PostgreSQLのデータ型 #nds51
第51回NDS PostgreSQLのデータ型 #nds51
 
PostgreSQL9.3新機能紹介
PostgreSQL9.3新機能紹介PostgreSQL9.3新機能紹介
PostgreSQL9.3新機能紹介
 
20171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-1020171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-10
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説
 
PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017
 

More from Tomoya Kawanishi

ENECHANGE社での Scout APM 利用事例
ENECHANGE社での Scout APM 利用事例ENECHANGE社での Scout APM 利用事例
ENECHANGE社での Scout APM 利用事例Tomoya Kawanishi
 
エンジニア転職のノウハウ
エンジニア転職のノウハウエンジニア転職のノウハウ
エンジニア転職のノウハウTomoya Kawanishi
 
Ruby の文字列について
Ruby の文字列についてRuby の文字列について
Ruby の文字列についてTomoya Kawanishi
 
Ruby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構についてRuby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構についてTomoya Kawanishi
 
Ruby初心者からよく質問されること
Ruby初心者からよく質問されることRuby初心者からよく質問されること
Ruby初心者からよく質問されることTomoya Kawanishi
 
RubyGems と Bundler について
RubyGems と Bundler についてRubyGems と Bundler について
RubyGems と Bundler についてTomoya Kawanishi
 
Ruby の正規表現について
Ruby の正規表現についてRuby の正規表現について
Ruby の正規表現についてTomoya Kawanishi
 
Ruby での外部コマンドの実行について
Ruby での外部コマンドの実行についてRuby での外部コマンドの実行について
Ruby での外部コマンドの実行についてTomoya Kawanishi
 
Ruby のワンライナーについて
Ruby のワンライナーについてRuby のワンライナーについて
Ruby のワンライナーについてTomoya Kawanishi
 
AWS のコスト管理をちゃんとしたくてやったこと
AWS のコスト管理をちゃんとしたくてやったことAWS のコスト管理をちゃんとしたくてやったこと
AWS のコスト管理をちゃんとしたくてやったことTomoya Kawanishi
 
HTTPと Webクローリングについて
HTTPと WebクローリングについてHTTPと Webクローリングについて
HTTPと WebクローリングについてTomoya Kawanishi
 
Active record query interface
Active record query interfaceActive record query interface
Active record query interfaceTomoya Kawanishi
 
Active Support のコア拡張機能について
Active Support のコア拡張機能についてActive Support のコア拡張機能について
Active Support のコア拡張機能についてTomoya Kawanishi
 
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナー
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナーRuby ビジネス創出展 Ruby初心者向けプログラミングセミナー
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナーTomoya Kawanishi
 
RubyのDir、File、IO について
RubyのDir、File、IO についてRubyのDir、File、IO について
RubyのDir、File、IO についてTomoya Kawanishi
 
Thread の利用事例紹介
Thread の利用事例紹介Thread の利用事例紹介
Thread の利用事例紹介Tomoya Kawanishi
 
Ruby の制御構造とリテラルについて
Ruby の制御構造とリテラルについてRuby の制御構造とリテラルについて
Ruby の制御構造とリテラルについてTomoya Kawanishi
 
Ruby の String のメソッドについて
Ruby の String のメソッドについてRuby の String のメソッドについて
Ruby の String のメソッドについてTomoya Kawanishi
 

More from Tomoya Kawanishi (20)

英単語の覚え方
英単語の覚え方英単語の覚え方
英単語の覚え方
 
ENECHANGE社での Scout APM 利用事例
ENECHANGE社での Scout APM 利用事例ENECHANGE社での Scout APM 利用事例
ENECHANGE社での Scout APM 利用事例
 
エンジニア転職のノウハウ
エンジニア転職のノウハウエンジニア転職のノウハウ
エンジニア転職のノウハウ
 
Ruby の文字列について
Ruby の文字列についてRuby の文字列について
Ruby の文字列について
 
Ruby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構についてRuby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構について
 
Ruby初心者からよく質問されること
Ruby初心者からよく質問されることRuby初心者からよく質問されること
Ruby初心者からよく質問されること
 
RubyGems と Bundler について
RubyGems と Bundler についてRubyGems と Bundler について
RubyGems と Bundler について
 
Ruby の正規表現について
Ruby の正規表現についてRuby の正規表現について
Ruby の正規表現について
 
Ruby での外部コマンドの実行について
Ruby での外部コマンドの実行についてRuby での外部コマンドの実行について
Ruby での外部コマンドの実行について
 
Ruby のワンライナーについて
Ruby のワンライナーについてRuby のワンライナーについて
Ruby のワンライナーについて
 
AWS のコスト管理をちゃんとしたくてやったこと
AWS のコスト管理をちゃんとしたくてやったことAWS のコスト管理をちゃんとしたくてやったこと
AWS のコスト管理をちゃんとしたくてやったこと
 
HTTPと Webクローリングについて
HTTPと WebクローリングについてHTTPと Webクローリングについて
HTTPと Webクローリングについて
 
Rake
RakeRake
Rake
 
Active record query interface
Active record query interfaceActive record query interface
Active record query interface
 
Active Support のコア拡張機能について
Active Support のコア拡張機能についてActive Support のコア拡張機能について
Active Support のコア拡張機能について
 
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナー
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナーRuby ビジネス創出展 Ruby初心者向けプログラミングセミナー
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナー
 
RubyのDir、File、IO について
RubyのDir、File、IO についてRubyのDir、File、IO について
RubyのDir、File、IO について
 
Thread の利用事例紹介
Thread の利用事例紹介Thread の利用事例紹介
Thread の利用事例紹介
 
Ruby の制御構造とリテラルについて
Ruby の制御構造とリテラルについてRuby の制御構造とリテラルについて
Ruby の制御構造とリテラルについて
 
Ruby の String のメソッドについて
Ruby の String のメソッドについてRuby の String のメソッドについて
Ruby の String のメソッドについて
 

Recently uploaded

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成Hiroshi Tomioka
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 

Recently uploaded (9)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 

PostgreSQL のイケてるテクニック7選

  • 1. PostgreSQL の イケてるテク 7選 2019/02/02 第10回 PostgreSQLアンカンファレンス
  • 2. 第10回PostgreSQL アンカンファレンス 「PostgreSQL のイケてるテク7選」 1自己紹介 Tomoya Kawanishi a.k.a. @cuzic 元 関西電力勤務 全社的に標準DBとして PostgreSQL を選定。導入を推進。 エネチェンジ株式会社 チーフエンジニア 電力会社、ガス会社を切り替えるなら、エネチェンジ経由で! 一般家庭も!法人も! WEBアプリケーション開発が主。 Ruby関西の中の人 発表者として登壇くださる方、あとで声かけください。 大手町.rb の中の人 毎月 大手町.rb の開催を予定 東京駅、各線大手町駅から直結! Ruby の初級者がメインターゲット
  • 3. 第10回PostgreSQL アンカンファレンス 「PostgreSQL のイケてるテク7選」 今日のテーマ 私は DB エンジニアではないので、 利用者側の内容ばかりになっています。 Timestamp の範囲の表現 Coalesce 関数とTimestamp型の 'infinity' tstzrange 共通テーブル式(Common Table Expressions) VALUES を使った subquery ラテラルジョイン 、json_array_elements、WITH ORDINALITY AS 豊富な集約関数 統計処理 ltree 型 2
  • 4. 第10回PostgreSQL アンカンファレンス 「PostgreSQL のイケてるテク7選」 Timestamp の範囲 1/3 キャンペーン情報をDBで管理 2月1日~2月28日までのキャンペーンなどがよくある 単純な実装例 有効なキャンペーンを取り出す SQL ちょっと読みにくい 3 id : キャンペーンの ID start_at : timestamp 型 end_at : timestamp 型 SELECT * FROM campaigns WHERE (start_at IS NULL OR start_at < now() ) AND (end_at IS NULL OR now() < end_at);
  • 5. 第10回PostgreSQL アンカンファレンス 「PostgreSQL のイケてるテク7選」 Timestamp の範囲 2/3 OR と AND の組合せは、脳への負担が重い AND だけだと理解しやすい coalesce : 第1引数が null のとき、第2引数の値を返す デフォルト値を設定できる関数と思うと理解しやすい 自動的に型変換される。 '-infinity'::timestamptz と同じ '-infinity' は無限の過去。 'infinity' は無限の未来 4 SELECT * FROM campaigns WHERE (start_at IS NULL OR start_at < now() ) AND (end_at IS NULL OR now() < end_at); SELECT * FROM campaigns WHERE coalesce(start_at, '-infinity') < now() AND now() < coalesce(end_at, 'infinity')
  • 6. 第10回PostgreSQL アンカンファレンス 「PostgreSQL のイケてるテク7選」 Timestamp の範囲 3/3 tstzrange で日時の範囲型を1つの列で表現できる [, ] で閉区間(境界を含む)、 (, ) で開区間(境界を含まない) @> で、簡潔に contains の判定が可能 gist の index 設定も可能で SQL も高速化可能 5 SELECT * FROM campaigns WHERE duration @> now(); id : キャンペーンの ID duration : tstzrange 型 INSERT INTO campaigns ( id, duration ) VALUES (1, '[-infinity, infinity]'), (2, '[-infinity, 2019-02-01)');
  • 7. 第10回PostgreSQL アンカンファレンス 「PostgreSQL のイケてるテク7選」 共通テーブル式(Common Table Expressions) 6 WITH provider_order_count AS ( SELECT provider_id, count(1) AS count FROM orders GROUP BY provider_id HAVING count(1) > 1000 ) SELECT b.key, count FROM provider_order_count AS a, providers AS b WHERE a.provider_id = b.id ここに参加してる人は 全員熟知してる? 私は最初かなり感動しました。 上から下に処理順に書ける、 読める。 これまで、FROM のところに 書いていたのと比べ 格段に維持運用しやすい
  • 8. 第10回PostgreSQL アンカンファレンス 「PostgreSQL のイケてるテク7選」 LATERAL ジョイン、json_array_elements、 WITH ORDILALITY LATERAL SQL 界の forループ 左側の各行に対して 右側のサブクエリを 実行し、ジョインする この場合、LATERAL は 省略可 (後続が関数だから) json_array_elements JSON の配列を 行として展開できる WITH ORDINALITY 順位を一緒に返す ->> JSON オブジェクトの 値を取り出す 7 WITH recent_histories AS ( SELECT * FROM try_histories ORDER BY id DESC ), chosen_plans_json AS ( SELECT id, t.chosen_plan, t.idx FROM recent_histories AS rh, LATERAL json_array_elements(rh.chosen_plans) WITH ORDINALITY AS t(chosen_plan, idx) ), SELECT id, idx, chosen_plan->>'provider_key' AS provider_key, chosen_plan->>'plan_key' AS plan_key, chosen_plan->>'area_key' AS area_key FROM chosen_plans_json;
  • 9. 第10回PostgreSQL アンカンファレンス 「PostgreSQL のイケてるテク7選」 CTE のサブクエリとして VALUES を書く CTE のサブクエリ として VALUES も 書ける 定数を SQL 内で 書ける 処理を AP サーバから DB サーバに移せる 8 WITH order_type_count AS ( SELECT type_id, count(1) AS count FROM orders GROUP BY type_id ), contract_types(type_id, name) AS ( VALUES (1, 'electric_gas'), (2, 'gas'), (3, 'electric') ) SELECT b.name, a.count FROM order_type_count AS a, contract_types AS b WHERE a.type_id = b.type_id
  • 10. 第10回PostgreSQL アンカンファレンス 「PostgreSQL のイケてるテク7選」 豊富な集約関数、ウィンドウ関数 集約関数 array_agg : 配列として集約 bool_and: 全部の値が true だと true。1つでも false だと false bool_or :全部の値が false だと false。 json(b)_agg : JSON の配列として集約 json_object_agg : JSON オブジェクトとして集約 string_agg : 文字列を区切り文字で連結して集約 FILTER 節 いままでの複雑な SQL が FILTER を使うととてもカンタンに書ける! pivot テーブル的なタテのものを横にしたいときとかにベンリ 9 SELECT count(1) FILTER(WHERE type_id = 1) AS electric_gas_count, count(1) FILTER(WHERE type_id = 2) AS gas_count, count(1) FILTER(WHERE type_id = 3) AS electric_count FROM orders;
  • 11. 第10回PostgreSQL アンカンファレンス 「PostgreSQL のイケてるテク7選」 PostgreSQL で統計処理 10 SELECT COUNT(1), -- カウント AVG(price), MIN(price), MAX(price), -- 平均、最小、最大 -- メディアン(中央値) PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY price) AS median_price, -- 標準偏差 STDDEV_SAMP(price) AS stddev_price, -- 25% パーセンタイル PERCENTILE_CONT(0.25) WITHIN GROUP(ORDER BY price) AS first_quartile, -- 75% パーセンタイル PERCENTILE_CONT(0.75) WITHIN GROUP(ORDER BY price) AS third_quartile, -- 相関係数 CORR(price, room_number) AS corr_rm, CORR(price, lower_status_percentage) AS corr_lstat, CORR(price, student_teacher_ratio) AS corr_ptratio FROM boston_housing_data; PostgreSQL だけで、さまざまな統計処理が可能 標準偏差、メディアン、パーセンタイル、相関係数 パーセンタイルを計算するときは並び順を WITHIN GROUP で指定する
  • 12. 第10回PostgreSQL アンカンファレンス 「PostgreSQL のイケてるテク7選」 ltree 型 PostgreSQL 標準拡張にある型の1つ 階層的なラベルデータを表現可能 @>、<@ 包含関係 ~ 経由する場合 gist の index の作成もできる 11 CREATE EXTENSION ltree; Top Top.Science Top.Science.Astronomy Top.Science.Astronomy.Astrophysics Top.Science.Astronomy.Cosmology Top.Hobbies Top.Hobbies.Amateurs_Astronomy Top.Collections Top.Collections.Pictures Top.Collections.Pictures.Astronomy Top.Collections.Pictures.Astronomy.Stars Top.Collections.Pictures.Astronomy.Galaxies Top.Collections.Pictures.Astronomy.Astronauts -- Top.Science の子孫のみを抽出する SQL SELECT * FROM "ltree_tests" WHERE (path <@ 'Top.Science') -- Astronomy を経由する場合を抽出する SQL SELECT * FROM "ltree_tests" WHERE (path ~ '*.Astronomy.*')
  • 13. 第10回PostgreSQL アンカンファレンス 「PostgreSQL のイケてるテク7選」 おわりに 私自身の仕事はDB専門ではなく WEBアプリケーション開発がメインです。 そのため、DBを利用する側に特化して 個人的にイケてると思う PostgreSQL の機能を いくつか紹介しました。 みなさんの参考になれば、さいわいです。 12