SlideShare a Scribd company logo
PostgreSQLとPython
PyCon mini 広島
What is it?
PostgreSQLとPython
What is it?
一見関係なさそうですが…
What is it?
一見関係なさそうですが…
密接な関係があります!
What is it?
そんな2つの関係をご紹介します
あじぇんだ
1 自己紹介
2 PL/Python
3 FDWとPython
4 まとめ
あじぇんだ
1 自己紹介
2 PL/Python
3 FDWとPython
4 まとめ
自己紹介
名前:曽根 壮大(そね たけとも)
年齢:31歳(三人の子供がいます)
職業:Webエンジニア
所属:日本PostgreSQLユーザ会
   中国支部 支部長
  技術的にはLL系言語とかRDBが好きです
中国地方DB勉強会
https://dbstudychugoku.github.io/
岡山Python勉強会
https://okapython.doorkeeper.jp/
岡山Python勉強会
https://okapython.doorkeeper.jp/
ハングアウトでも参加可能!
あじぇんだ
1 自己紹介
2 PL/Python
3 FDWとPython
4 まとめ
PL/Python
PL/Python?
PL/Python
まずはPL/pgSQLの話
PL/Python
ストアドプロシージャ
を作るための機能
↓
DB内で手続き型な処理がしたい時に使う
PL/Python
ストアドプロシージャ
を作るための機能
↓
DB内で手続き型な処理がしたい時に使う
PL/Python
具体例
• ループさせたい(for文)
• 条件分岐したい(if文)
• データを加工したい
PL/Python
PL/pgSQLを使うメリット
(公式ドキュメントから引用)
•クライアント サーバ間において、不要
な中間処理の結果や通信を減らす
•一連の問い合わせに、複数の解析が不要
PL/Python
新しい言語覚えるの面倒
+
PL/pgSQLは読みにくい
PL/pgSQL
CREATE OR REPLACE FUNCTION fnc_test() RETURNS int AS $$
DECLARE
cs CURSOR FOR SELECT * FROM t_test;
rec record;
dum char;
BEGIN
OPEN cs;
LOOP
FETCH cs INTO rec;
IF NOT FOUND THEN
EXIT;
END IF;
RAISE NOTICE 'record is %', rec;
END LOOP;
CLOSE cs;
RETURN 0;
END;
$$ LANGUAGE plpgsql;
PL/pgSQL
CREATE OR REPLACE FUNCTION fnc_test() RETURNS int AS $$
DECLARE
cs CURSOR FOR SELECT * FROM t_test;
rec record;
dum char;
BEGIN
OPEN cs;
LOOP
FETCH cs INTO rec;
IF NOT FOUND THEN
EXIT;
END IF;
RAISE NOTICE 'record is %', rec;
END LOOP;
CLOSE cs;
RETURN 0;
END;
$$ LANGUAGE plpgsql;
ループのスコープがわかりにくい
PL/pgSQL
CREATE OR REPLACE FUNCTION fnc_test() RETURNS int AS $$
DECLARE
cs CURSOR FOR SELECT * FROM t_test;
rec record;
dum char;
BEGIN
OPEN cs;
LOOP
FETCH cs INTO rec;
IF NOT FOUND THEN
EXIT;
END IF;
RAISE NOTICE 'record is %', rec;
END LOOP;
CLOSE cs;
RETURN 0;
END;
$$ LANGUAGE plpgsql;
ループのスコープがわかりにくい
IFが直感的ではない
PL/Python
そこでPL/Python!
PL/Python
PL/○○
•PHP
•Perl
•Ruby
•JavaScript
•R
•Java …etc
PL/Python
PL/○○
•PHP
•Perl
•Ruby
•JavaScript
•R
•Java …etc
他にも色々ある
PL/Python
CREATE OR REPLACE FUNCTION fnc_test() 
RETURNS SETOF int AS $$
import plpy
cs = plpy.execute("SELECT * FROM t_test")
for record in cs:
yield record['text']
$$ LANGUAGE plpython2u;
PL/Python
CREATE OR REPLACE FUNCTION fnc_test() 
RETURNS SETOF int AS $$
import plpy
cs = plpy.execute("SELECT * FROM t_test")
for record in cs:
yield record['text']
$$ LANGUAGE plpython2u;
もちろんPython3も使える
PL/Python
CREATE OR REPLACE FUNCTION fnc_test() 
RETURNS SETOF int AS $$
import plpy
cs = plpy.execute("SELECT * FROM t_test")
for record in cs:
yield record['text']
$$ LANGUAGE plpython2u;
もちろんPython3も使える
既存のLibraryを再利用できる
PL/Python
既存のLibraryを再利用できる
PL/Python
既存のLibraryを再利用できる
↓
PyDataもNumPyも使える
PL/Python
既存のLibraryを再利用できる
↓
PyDataもNumPyも使える
Pythonはデータサイエンスと相性が良い
PL/Python
PL/Python
詳しいことは
@snagaさん
に聞くと良い(多分
PL/Python
DBの世界もこれで怖くない!
あじぇんだ
1 自己紹介
2 PL/Python
3 FDWとPython
4 まとめ
FDWとは
外部テーブルを作成するための機能
(外部のデータをtableにする)
FDWとは
外部データにテーブルと同様に
SQL文でアクセスできる
FDWとは
• WHEREやORDER BYが使える
• GROUP BYなどの集合関数も使える
• JOINなど、他tableと関連付け出来る
• 更新や削除も出来る(ただし9.3から)
FDWとは
外部データ
↓
DB、CSV、JSON、WebAPIなんでも良い
FDWとは
PostgreSQL
to
PostgreSQL
FDWとは
MySQL
to
PostgreSQL
FDWとは
MongoDB
to
PostgreSQL
FDWとは
Git
to
PostgreSQL
SQL Databases Wrappers
• postgres_fdw
• oracle_fdw
• mysql_fdw
• odbc_fdw
• jdbc_fdw
NoSQL Databases Wrappers
• couchdb_fdw
• MonetDB FDW
• mongo_fdw
• redis_fdw
• Neo4j fdw
• Tycoon FDW
Others
• git_fdw
• ldap_fdw
• IMAP_fdw
• s3_fdw
• www_fdw
• OS_fdw
FDWとは
その他に既に多くの実装がある
SQL Databases Wrappers
• postgres_fdw
• oracle_fdw
• mysql_fdw
• odbc_fdw
• jdbc_fdw
FDWを使う
MySQLPostgreSQL
FDWを使う
MySQLPostgreSQL
TABLE
FDWを使う
EXTENSION
MySQLPostgreSQL
TABLE
FDWを使う
EXTENSION
MySQLPostgreSQL
TABLE
mysql_fdwをインストールする
FDWを使う
server
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
FDWを使う
server
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
MySQLの接続先を設定する
MySQLの接続ユーザを設定する
FDWを使う
server
FOREIGN
TABLE
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
FDWを使う
server
FOREIGN
TABLE
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
PostgreSQLの外部tableを作成する
FDWを使う
server
FOREIGN
TABLE
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
Client
FDWを使う
server
FOREIGN
TABLE
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
Client
SQLで問い合わせ
FDWを使う
server
FOREIGN
TABLE
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
Client
SQLで問い合わせ
外部tableにアクセス
FDWを使う
server
FOREIGN
TABLE
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
Client
アクセス先を確認
FDWを使う
server
FOREIGN
TABLE
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
Client
MySQLにクエリを投げる
FDWを使う
server
FOREIGN
TABLE
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
Client
実行結果を取得
FDWを使う
server
FOREIGN
TABLE
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
Client
実行結果を表示
FDWを使う
server
FOREIGN
TABLE
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
Client
FDWを使う
server
FOREIGN
TABLE
EXTENSION
USER MAPPING
MySQLPostgreSQL
TABLE
Client
ここを作る
FDWを作る
現時点では
ほんの少しの元気と勇気と
PostgreSQLの内部構造に関する知識
がある程度必要です。
FDW超詳しい人
FDWを作る
なんか出来そう!!
FDWを作る
1週間後…
FDWを作る
圧倒的挫折…
FDWを作る
出来る人の簡単
FDWを作る
出来る人の簡単
↓
凡人の超えられない壁
FDWを作る
それなりの覚悟とちゃんとした
PostgreSQLとCの知識が必要
FDWを作る
でも大丈夫
FDWを作る
簡単にPythonで作る方法がある
FDWを作る
Multicorn
Multicorn
FDWを
Pythonで実装する
ためのLibrary
Multicorn
class hogeFDW(ForeignDataWrapper):
def __init__(self, options, columns):
super(hogeFDW, self).__init__(options, columns)
self.columns = columns
def execute(self, quals, columns):
#range(1,20)で20行の擬似TABLEを作る
for i in range(1,20):
# 値を返してあげる
yield(i, "hoge")
Multicorn
class hogeFDW(ForeignDataWrapper):
def __init__(self, options, columns):
super(hogeFDW, self).__init__(options, columns)
self.columns = columns
def execute(self, quals, columns):
#range(1,20)で20行の擬似TABLEを作る
for i in range(1,20):
# 値を返してあげる
yield(i, "hoge")
WHERE句の中身
必ず適用される
あじぇんだ
1 自己紹介
2 PL/Python
3 FDWとPython
4 まとめ
まとめ
PostgreSQLとPython
まとめ
PostgreSQLとPython
↓
実は仲良し
まとめ
OSやミドルウェアのレイヤでは
Pythonはデファクトスタンダード
と言って良い(多分
まとめ
Pythonを出来る
¦¦
インフラエンジニアとして有利!
まとめ
Pythonで視野を広げてみませんか?
参考資料
・公式ドキュメント(日本語)
https://www.postgresql.jp/document/9.4/html/postgres-fdw.html
・postgresql-jp Slack(チャットルーム)
https://postgresql-hackers-jp.herokuapp.com/
まとめ
Pythonを制するものは
インフラを制す
ご静聴ありがとうございました。

More Related Content

What's hot (20)

PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
Katsuhiro Morishita
 
PPTX
OSC2015kyoto
Miki Shimogai
 
PDF
Pg14_sql_standard_function_body
kasaharatt
 
PDF
Python入門
Shohei Okada
 
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
Miki Shimogai
 
PDF
Postgre sql9.3 newlockmode_and_etc
kasaharatt
 
PDF
PEP8を読んでみよう
2bo 2bo
 
PPTX
OSC2015nagoya
Miki Shimogai
 
KEY
ひのきのぼうだけで全クリ目指す
AromaBlack
 
PDF
Python東海Vol.5 IPythonをマスターしよう
Hiroshi Funai
 
PDF
OSC沖縄2014_JPUG資料
kasaharatt
 
PDF
pythonでオフィス快適化計画
Kazufumi Ohkawa
 
PPTX
SQLチューニング入門 入門編
Miki Shimogai
 
PDF
pg_bigmを用いた全文検索のしくみ(前編)
NTT DATA OSS Professional Services
 
PDF
シンプルでシステマチックな Linux 性能分析方法
Yohei Azekatsu
 
PPT
クラウド時代の並列分散処理技術
Koichi Fujikawa
 
PDF
Hackers Champloo 2016 postgresql-9.6
Toshi Harada
 
PDF
「Python言語」はじめの一歩 / First step of Python
Takanori Suzuki
 
PPT
20090107 Postgre Sqlチューニング(Sql編)
Hiromu Shioya
 
PPTX
2017/12/21 虎の穴 Python勉強会
虎の穴 開発室
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
Katsuhiro Morishita
 
OSC2015kyoto
Miki Shimogai
 
Pg14_sql_standard_function_body
kasaharatt
 
Python入門
Shohei Okada
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
Miki Shimogai
 
Postgre sql9.3 newlockmode_and_etc
kasaharatt
 
PEP8を読んでみよう
2bo 2bo
 
OSC2015nagoya
Miki Shimogai
 
ひのきのぼうだけで全クリ目指す
AromaBlack
 
Python東海Vol.5 IPythonをマスターしよう
Hiroshi Funai
 
OSC沖縄2014_JPUG資料
kasaharatt
 
pythonでオフィス快適化計画
Kazufumi Ohkawa
 
SQLチューニング入門 入門編
Miki Shimogai
 
pg_bigmを用いた全文検索のしくみ(前編)
NTT DATA OSS Professional Services
 
シンプルでシステマチックな Linux 性能分析方法
Yohei Azekatsu
 
クラウド時代の並列分散処理技術
Koichi Fujikawa
 
Hackers Champloo 2016 postgresql-9.6
Toshi Harada
 
「Python言語」はじめの一歩 / First step of Python
Takanori Suzuki
 
20090107 Postgre Sqlチューニング(Sql編)
Hiromu Shioya
 
2017/12/21 虎の穴 Python勉強会
虎の穴 開発室
 

Similar to PostgreSQLとpython (20)

PDF
20181110 fok2018-pg-extension
Toshi Harada
 
PDF
20190119 aws-study-pg-extension
Toshi Harada
 
PDF
外部データラッパによる PostgreSQL の拡張
Shigeru Hanada
 
PDF
20150520 lt-neo4j勉強会-neofj fdw
Toshi Harada
 
PDF
Postgre sqlから見るnosql
Soudai Sone
 
PDF
PostgreSQL10徹底解説
Masahiko Sawada
 
PDF
PostgreSQL9.3新機能紹介
NTT DATA OSS Professional Services
 
PDF
20191211_Apache_Arrow_Meetup_Tokyo
Kohei KaiGai
 
PDF
9.3で進化した外部テーブル
Shigeru Hanada
 
PDF
PostgreSQLでスケールアウト
Masahiko Sawada
 
PDF
20171103 pg con-jp-lt-plpgsql
Toshi Harada
 
PDF
20171106 ntt-tx-postgre sql-10
Toshi Harada
 
PDF
[B22] PostgresPlus Advanced Server の Oracle Database 互換機能検証 by Noriyoshi Shinoda
Insight Technology, Inc.
 
PDF
Chugokudb18_1
Kosuke Kida
 
PDF
PostgreSQL 12の話
Masahiko Sawada
 
PDF
Osc shimane-2016-do-postgres-dream-of-graph-database
Toshi Harada
 
PPTX
PostgreSQLのソース・ターゲットエンドポイントとしての利用
QlikPresalesJapan
 
PDF
20191115-PGconf.Japan
Kohei KaiGai
 
PDF
The Digital Experiences with Postgresql in Taiwan
José Lin
 
PDF
Pgunconf neo4j fdw
Toshi Harada
 
20181110 fok2018-pg-extension
Toshi Harada
 
20190119 aws-study-pg-extension
Toshi Harada
 
外部データラッパによる PostgreSQL の拡張
Shigeru Hanada
 
20150520 lt-neo4j勉強会-neofj fdw
Toshi Harada
 
Postgre sqlから見るnosql
Soudai Sone
 
PostgreSQL10徹底解説
Masahiko Sawada
 
PostgreSQL9.3新機能紹介
NTT DATA OSS Professional Services
 
20191211_Apache_Arrow_Meetup_Tokyo
Kohei KaiGai
 
9.3で進化した外部テーブル
Shigeru Hanada
 
PostgreSQLでスケールアウト
Masahiko Sawada
 
20171103 pg con-jp-lt-plpgsql
Toshi Harada
 
20171106 ntt-tx-postgre sql-10
Toshi Harada
 
[B22] PostgresPlus Advanced Server の Oracle Database 互換機能検証 by Noriyoshi Shinoda
Insight Technology, Inc.
 
Chugokudb18_1
Kosuke Kida
 
PostgreSQL 12の話
Masahiko Sawada
 
Osc shimane-2016-do-postgres-dream-of-graph-database
Toshi Harada
 
PostgreSQLのソース・ターゲットエンドポイントとしての利用
QlikPresalesJapan
 
20191115-PGconf.Japan
Kohei KaiGai
 
The Digital Experiences with Postgresql in Taiwan
José Lin
 
Pgunconf neo4j fdw
Toshi Harada
 
Ad

More from Soudai Sone (20)

PDF
DBの闇を書くにはこの余白は狭すぎる
Soudai Sone
 
PDF
レガシーな環境からモダンへの挑戦
Soudai Sone
 
PDF
PostgreSQLアンチパターン
Soudai Sone
 
PDF
地方エンジニアがPostgreSQLを通じて成長した話
Soudai Sone
 
PDF
DDDハンズオン
Soudai Sone
 
PDF
実務で役立つデータベースの活用法
Soudai Sone
 
PDF
今すぐ使えるクラウドとPostgreSQL
Soudai Sone
 
PDF
Webで役立つRDBの使い方
Soudai Sone
 
PDF
中国地方Db勉強会
Soudai Sone
 
PDF
Ansibleで始めるpostgre sqlの冗長化
Soudai Sone
 
PDF
Web エンジニアが postgre sql を選ぶ 3 つの理由
Soudai Sone
 
PDF
Web で変わったクラウドと postgre sql の今と昔
Soudai Sone
 
PDF
すぐ始めれるクラウド
Soudai Sone
 
PDF
Osc2014
Soudai Sone
 
PDF
PostgreSQLの冗長化について
Soudai Sone
 
PDF
Osh2014
Soudai Sone
 
PDF
Postgre sql9.3新機能 (OSC hiroshima 2013)
Soudai Sone
 
PDF
聞いたら参加したくなるJjug cccの報告
Soudai Sone
 
PDF
地方における勉強会事情
Soudai Sone
 
PDF
Wtm
Soudai Sone
 
DBの闇を書くにはこの余白は狭すぎる
Soudai Sone
 
レガシーな環境からモダンへの挑戦
Soudai Sone
 
PostgreSQLアンチパターン
Soudai Sone
 
地方エンジニアがPostgreSQLを通じて成長した話
Soudai Sone
 
DDDハンズオン
Soudai Sone
 
実務で役立つデータベースの活用法
Soudai Sone
 
今すぐ使えるクラウドとPostgreSQL
Soudai Sone
 
Webで役立つRDBの使い方
Soudai Sone
 
中国地方Db勉強会
Soudai Sone
 
Ansibleで始めるpostgre sqlの冗長化
Soudai Sone
 
Web エンジニアが postgre sql を選ぶ 3 つの理由
Soudai Sone
 
Web で変わったクラウドと postgre sql の今と昔
Soudai Sone
 
すぐ始めれるクラウド
Soudai Sone
 
Osc2014
Soudai Sone
 
PostgreSQLの冗長化について
Soudai Sone
 
Osh2014
Soudai Sone
 
Postgre sql9.3新機能 (OSC hiroshima 2013)
Soudai Sone
 
聞いたら参加したくなるJjug cccの報告
Soudai Sone
 
地方における勉強会事情
Soudai Sone
 
Ad

Recently uploaded (9)

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

PostgreSQLとpython