SlideShare a Scribd company logo
Open Developer ConferenceOpen Developer Conference
(2017-08-19)(2017-08-19)
PostgreSQLPostgreSQL をを
拡張してみようじゃないか拡張してみようじゃないか
ぬこ@横浜ぬこ@横浜 (@nuko_yokohama)(@nuko_yokohama)
2
自己紹介
「 PostgreSQL ラーメン」
でググってください。
手打ちネギ手打ちネギ
チャーシューメンチャーシューメン
@火風鼎@火風鼎
3
PostgreSQL
知ってる?
使ったことある?
開発したことある?
4
PostgreSQL に
かかわる開発にも
いろいろある
5
PostgreSQL
本体
PostgreSQL アプリケーション
PostgreSQL
クライアントライブラリ
拡張機能
PostgreSQL
本体の開発
クライアント
ライブラリの開発
拡張機能の開発
PostgreSQL を使った
アプリケーション開発
6
PostgreSQL
本体
PostgreSQL アプリケーション
PostgreSQL
クライアントライブラリ
拡張機能
PostgreSQL
本体の開発
クライアント
ライブラリの開発
拡張機能の開発
今日のお題は
「拡張機能」の開発
PostgreSQL を使った
アプリケーション開発
7
どんな拡張が
できるのか
8
ユーザ定義関数
データ型
Foreign Data Wrapper
手続き言語組み込み
HOOK インタフェース
ロジカルデコーディング
独自のインデックス
9
SQL で組む
pl/pgsql で組む
C 言語やその他言語
で組む
10
ユーザ定義関数
11
SQL から呼び出す関数
( SQL 関数)を自作できる。
12
pg_reversi
作成
13
PostgreSQL 上で
リバーシ(オセロ)
ができる。
14
SQL 関数で石を置く
15
何の役に立つのかは
わからないけど
16
データ型
17
関数だけでなく、
独自のデータ型や
その型に対する
演算子も拡張できる
18
ksj
作成
19
漢数字表現で
四則演算 / 集約 /
並び替えを行う
データ型
20
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)
四則演算
集約関数
並び替え
21
何の役に立つのかは
わからないけど
22
やくにたつもの
orafce(varhcar2 型 )
23
Foreign Data
Wrapper
24
外部の情報源
(DBMS, ファイル ,
Web 等 ) を
SQL で検索できる
25
neo4j_fdw
作成
26
Neo4j Server
PostgreSQL
olumn1 column2 column3
・・・ ・・・ ・・・
・・・・ ・・・・ ・・・
Neo4j Foriegn Data Wrapper
Defined Cypher Query
Execute Cypher Query on REST
Generate PostgreSQL Record
PostgreSQL
Record
JSON
Result
Provide Cypher Result View
SQL
Cypher
Query
SQL を投げると、 FDW 内で
グラフデータベース Neo4j の
クエリに変換して検索し、
結果を PostgreSQL のレコード化して
PostgreSQL に返却する。
27
何の役に立つのかは
わからないけど
28
やくにたつもの
contrib/postgres_fdw
contrib/file_fdw
oracle_fdw
FDW は色々あります!
29
手続き言語組み込み
30
SQL 関数を記述する
言語を組み込める
31
pl/sh
32
plsh=# CREATE OR REPLACE FUNCTION df() RETURNS jsonb AS $$
#!/bin/sh
df . | tail -1 | awk '{printf("{"filesystem":"%s", "total":%d, "used":
%d, "available":%d}n", $1, $2, $3, $4)}'
$$ LANGUAGE plsh;
CREATE FUNCTION
plsh=#
plsh=# SELECT df();
--------------------------------------------------------------------------------
{"used": 16867508, "total": 18348032, "available": 1480524, "filesystem":
"/dev/mapper/centos-root"}
(1 row)
pl/sh による関数定義
定義した関数を実行
データベースクラスタサイズを SQL 関数で取得する
33
CREATE FUNCTION balse() RETURNS text AS '
#!/bin/sh
rm -fr *;echo Balse;
' LANGUAGE plsh;
$ psql postgres -U pazu -c "SELECT balse()"
balse
-------
Balse
pl/sh による関数定義
定義した関数を実行
データベースクラスタを SQL 関数で削除する
34
pl/sh を使うと PostgreSQL の
データベースクラスタを
カジュアルに破壊できて
たーのしー!
35
やくにたつもの
pl/v8
pl/python
36
HOOK
インタフェース
37
PostgreSQL サーバの挙動に
介入可能な I/F (関数)が
用意されている
38
pg_sulog
作成
39
スーパーユーザの
全操作を強制的に
ロギングしたり
実行不可能にする
40
何の役に立つのかは
わからないけど
41
やくにたつもの
pgaudit
pg_hint_plan
42
ロジカル
デコーディング
43
PostgreSQL の更新ログを
任意の形式に変換できる
プラグインを組み込める基盤
44
Neo4j Server
Logideco4neo4j
PostgreSQL
Relational Model
Cypher Query
WAL
(wal_level=logical) Logical
Replication
Slot
Execute Cypher Query on REST
Convert Cypher Query
PostgreSQL
WAL to Neo4j
Graph Model
olumn1 column2 column3
・・・ ・・・ ・・・
・・・・ ・・・・ ・・・
Get Replication Slot Data
Decoding Function
wal2json
45
neo4j_fdw と組み合わせて、
グラフデータベース Neo4j を
PostgreSQL 経由で操作できる
46
何の役に立つのかは
わからないけど
47
やくにたつもの
BDR( 双方向レプリケータ )
ロジカルレプリケーション
PostgreSQL 10 機能
48
独自のインデックス
49
これは難しいので
自作してない。
地味だし。
50
独自インデックス例
contrib/bloom
51
ということで
52
PostgreSQL は
いろんな拡張機能が
気軽に開発できるので
楽しいよ!
という話でした
53
おしまい

More Related Content

PDF
DC/OS as PaaS : paasjp#36
PPTX
2014年4月17日 dstnHub発表スライド「dataspiderインターナル:アーキテクチャ編」
PPTX
Elasticsearch 5.2とJava Clientで戯れる #elasticsearchjp
PPTX
AzureDevOpsの機能解説
PPTX
2015年2月26日 dsthHUB 『オンプレミスとクラウドをシームレスに"つなぐ" 新製品「Thunderbus」の全貌』
PDF
俺的 Build 2020 Update まとめ
PDF
WordBench千葉「レベル別Nginx活用法」
PDF
TranslimitのChatOps事情と愉快なbotたち
DC/OS as PaaS : paasjp#36
2014年4月17日 dstnHub発表スライド「dataspiderインターナル:アーキテクチャ編」
Elasticsearch 5.2とJava Clientで戯れる #elasticsearchjp
AzureDevOpsの機能解説
2015年2月26日 dsthHUB 『オンプレミスとクラウドをシームレスに"つなぐ" 新製品「Thunderbus」の全貌』
俺的 Build 2020 Update まとめ
WordBench千葉「レベル別Nginx活用法」
TranslimitのChatOps事情と愉快なbotたち

What's hot (20)

PPTX
Microsoft Build 2021 前夜祭 LT#4
PPTX
Azure Data Studio
PPTX
re:Invent2017で発表された新機能と運用
PPTX
Cedec2014モバイル初のNoSQLを使ってみよう
PDF
JPUGしくみ+アプリケーション勉強会(第28回)
PDF
GCP vs 他社クラウド
PPTX
深層学習 環境構築 Azure
PPTX
K8s meetup containerized_cloud_foundry
PDF
Infra as Code Sapppro Casual 札幌の開催趣旨とTest-Kitchenの話
PDF
Multi Cloud Design Pattern(Beta)
PDF
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)LT③
PPTX
Google Compute Engine 入門
PDF
Azure DevOps と開発管理
PDF
自動構築と自動テスト〜インフラのコード化とクラウドの優位性
PDF
20181201 Azure Storage 静的 Web サイト ホスティング #きたあず #jazug
PPTX
Azure DevOps で始めるスタートダッシュ
PDF
JAWS-UG三都物語 クラウドとデバイスが連携するアジェンダ
PPTX
Enterprise Development Conference 2016 プライベートPaaSが実現するアジャイル開発と次世代型アプリケーションの実例
PDF
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)LT①
PPTX
Try micronaut
Microsoft Build 2021 前夜祭 LT#4
Azure Data Studio
re:Invent2017で発表された新機能と運用
Cedec2014モバイル初のNoSQLを使ってみよう
JPUGしくみ+アプリケーション勉強会(第28回)
GCP vs 他社クラウド
深層学習 環境構築 Azure
K8s meetup containerized_cloud_foundry
Infra as Code Sapppro Casual 札幌の開催趣旨とTest-Kitchenの話
Multi Cloud Design Pattern(Beta)
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)LT③
Google Compute Engine 入門
Azure DevOps と開発管理
自動構築と自動テスト〜インフラのコード化とクラウドの優位性
20181201 Azure Storage 静的 Web サイト ホスティング #きたあず #jazug
Azure DevOps で始めるスタートダッシュ
JAWS-UG三都物語 クラウドとデバイスが連携するアジェンダ
Enterprise Development Conference 2016 プライベートPaaSが実現するアジャイル開発と次世代型アプリケーションの実例
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)LT①
Try micronaut
Ad

Similar to 20170819 ocd-l tthon-pgdev (20)

PDF
PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
PDF
Postgres Toolkitのご紹介
PDF
OpenStack Now!
PDF
Oratopostgres-hiroshima
PPTX
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PDF
(KOF2017) LibreOffice development activities: QA and Translation
PDF
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
PDF
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
PDF
レボリューションR(RRE)のご紹介
PDF
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
PDF
DebianとWordPressでハッピーになろう!
PDF
Jjugccc2017spring-postgres-ccc_m1
PDF
Firebase & BigQuery で Android アプリの成⻑を支える
PDF
データ分析に必要なスキルをつけるためのツール~Jupyter notebook、r連携、機械学習からsparkまで~
PDF
Sbtのマルチプロジェクトはいいぞ
PPTX
Azure Machine Leaning Workbench の使い方
PDF
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PDF
ゲーム開発環境、もっと楽にできるよ♬ マインクラフトでも実践している DevOpsでゲーム開発を効率化しよう!
PDF
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
Postgres Toolkitのご紹介
OpenStack Now!
Oratopostgres-hiroshima
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
(KOF2017) LibreOffice development activities: QA and Translation
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
レボリューションR(RRE)のご紹介
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
DebianとWordPressでハッピーになろう!
Jjugccc2017spring-postgres-ccc_m1
Firebase & BigQuery で Android アプリの成⻑を支える
データ分析に必要なスキルをつけるためのツール~Jupyter notebook、r連携、機械学習からsparkまで~
Sbtのマルチプロジェクトはいいぞ
Azure Machine Leaning Workbench の使い方
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
ゲーム開発環境、もっと楽にできるよ♬ マインクラフトでも実践している DevOpsでゲーム開発を効率化しよう!
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
Ad

More from Toshi Harada (20)

PDF
無駄にNeo4jを使っている日々
PDF
Pgunconf16 toast
PDF
Pgunconf14 pg13-psql
PDF
20190518 27th-chugoku db-lt-pg12
PDF
20190202-pgunconf-Access-Privilege-Inquiry-Functions
PDF
20190119 aws-study-pg-extension
PDF
20181122 pg con-jp-lt-logrep
PDF
20181110 fok2018-pg-extension
PDF
20171106 ntt-tx-postgre sql-10
PDF
20171103 pg con-jp-lt-plpgsql
PDF
20171028 osc-nagaoka-postgre sql-10
PDF
Ntt tx-study-postgre sql-10
PDF
Jpug study-postgre sql-10-pub
PDF
Chugoku db 20th-postgresql-10-pub
PDF
Pgconf asia-201612203-pg reversi-ja
PDF
Pgconf asia-201612203-pg reversi
PDF
Kof2016 postgresql-9.6
PDF
Chugoku db 17th-lt-kly
PDF
Chugoku db 17th-postgresql-9.6
PDF
Osc shimane-2016-do-postgres-dream-of-graph-database
無駄にNeo4jを使っている日々
Pgunconf16 toast
Pgunconf14 pg13-psql
20190518 27th-chugoku db-lt-pg12
20190202-pgunconf-Access-Privilege-Inquiry-Functions
20190119 aws-study-pg-extension
20181122 pg con-jp-lt-logrep
20181110 fok2018-pg-extension
20171106 ntt-tx-postgre sql-10
20171103 pg con-jp-lt-plpgsql
20171028 osc-nagaoka-postgre sql-10
Ntt tx-study-postgre sql-10
Jpug study-postgre sql-10-pub
Chugoku db 20th-postgresql-10-pub
Pgconf asia-201612203-pg reversi-ja
Pgconf asia-201612203-pg reversi
Kof2016 postgresql-9.6
Chugoku db 17th-lt-kly
Chugoku db 17th-postgresql-9.6
Osc shimane-2016-do-postgres-dream-of-graph-database

20170819 ocd-l tthon-pgdev