SlideShare a Scribd company logo
OSS ユーザーのための勉強会
<OSS X Users Meeting> #6  
PostgreSQL と MySQL
Lighting-Talk
私的な PostgreSQL の楽しみ方
ぬこ@横浜 (@nuko_yokohama)
自己紹介
「ぬこ@横浜」で検索
ラーメンの食べ歩きと
無駄な PostgreSQL 拡張を考えるのが趣味
さて、 MySQL と PostgreSQL
どっち派なの?と聞かれたら
躊躇なく PostgreSQL 派と
私は答えちゃうわけですが
なんで
私が PostgreSQL を
お気に入りなのか
無駄に?
機能拡張能力が
高いから
ユーザ定義関数
ユーザ定義型
独自インデックス
Foreign Data Wrapper
Background Worker Process
Custom Scan API
手続き言語ハンドラ
HOOK 組込
etc ・・・
面白いので
自分でも
いくつか作った
ユーザ定義型の例
漢数字型 (ksj)
SELECT data, data + ' 拾 ' FROM ksj_sample;
data | ?column?
------------+----------------
五百壱拾六 | 五百弐拾六
零 | 壱拾
参万壱百壱 | 参万壱百壱拾壱
(3 rows)
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)
漢数字で
四則演算や
比較演算できます
ユーザ定義型の例
ゆるい TEXT 型
(ntext)
SELECT * FROM foo WHERE data = ' 味噌らーめん ';
id | data
----+--------------
1 | 味噌ラーメン
(1 row)
SELECT * FROM foo WHERE data = 'postgresql';
id | data
----+----------------------
2 | PostgreSQL
(1 row)
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
----+------
(0 rows)
SELECT * FROM foo WHERE data /= ' センヌリティウス ';
id | data
----+------------------
4 | セリヌンティウス
(1 row)
SELECT * FROM foo WHERE data /= ' フィロストラス ';
id | data
----+------------------
5 | フィロストラトス
(1 row)
日本語正規化
+
typo を許容
Foreign Data
Wrapper の例
neo4j_fdw
Neo4j Server
Neo4j Foriegn Data Wrapper
PostgreSQL
REST I/FCypher
Query
JSON
Result
SQL
PostgreSQL
Record
Set Cypher Query
Execute Cypher Query on REST
Generate PostgreSQL Record
Neo4j-FDW
Concept
Do not convert SQL into Cypher!
neo4j_fdw のデータソース
CREATE EXTENSION neo4j_fdw;
CREATE EXTENSION
CREATE SERVER foo
FOREIGN DATA WRAPPER neo4j_fdw
OPTIONS (url 'http://localhost:7474/db/data/cypher');
CREATE SERVER
CREATE FOREIGN TABLE bar2 (
name text,
follower_name text,
follower_gender text)
SERVER foo
OPTIONS (query '{"query":"START n=node(*) MATCH p=n<-[]-fm
RETURN n.name as name , fm.name as follower_name, fm.gender? as follower_gender " }');
CREATE FOREIGN TABLE
SELECT name, follower_name, follower_gender FROM bar2;
name | follower_name | follower_gender
---------+---------------+-----------------
Yamato | Akagi | Famale
Musashi | Yamato | Male
Akagi | Hiryu | Famale
Akagi | Yamato | Male
Kaga | Hiryu | Famale
Kaga | Musashi | Male
Nagato | Mutsu | Male
Nagato | Yamato | Male
Mutsu | Nagato | Male
Hiryu | Soryu | Famale
Hiryu | Akagi | Famale
Soryu | Hiryu | Famale
(12 rows)
グラフデータベースの
ビューを定義して、
そこへ SQL で問い合わせ
Background Worker
Process の例
hit_and_blow
hb_worker.so
Postgres server(9.3)
Background
Worker Process
(libpq を使用 )
【 postgresql.conf 】
shared_preload_libraries = 'hb_worker'
hb_worker.conninfo = 'dbname=xxx user=yyy'
psql
チャネル
HB_SV
チャネル
HB_CL
NOTIFY HB_CL,' 結果 ' NOTIFY HB_SV,' 数字列 '
こんな感じ
起動
LISTEN HB_CL
起動
LISTEN HB_SV
ロード・起動
数当て判定処理
psql からの実行例
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 の応答
LOG: NOTIFY HB_CL,'2 Hit / 1 Blow.'
LOG: hb_worker: NOTIFY HB_CL,'4 Hit! Conguratulatoins!, next new game.'
LOG: hb_worker: set secret number=0391
(注:見やすさのために適宜改行している)
psql から数当て
HOOK の例
pg_heartman
pg_heartman とは
[nuko]$ LOG: loaded library "hartmanhook"
LOG: database system was shut down at 2014-02-16 04:45:33 PST
LOG: database system is ready to accept connections
LOG: autovacuum launcher started
[nuko]$ psql test
psql (9.3.2)
Type "help" for help.
test=# SELECT 1;
NOTICE: Sir, yes, sir!
?column?
----------
1
(1 row)
test=# d
NOTICE: Sir, yes, sir!
List of relations
Schema | Name | Type | Owner
--------+------+-------+--------
public | test | table | harada
(1 row)
test=#
SQL を投げると
ハートマン軍曹から
罵ってもらえます
(現在実装中)
実に
くだらない
でも、拡張機能を
使って、こういう
遊びが出来るのが
PostgreSQL の
好きなところです
時間が余ったら
デモします
おしまい
Ad

Recommended

KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
Toshi Harada
 
Lt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdw
Toshi Harada
 
[9.5新機能]追加されたgroupbyの使い方
[9.5新機能]追加されたgroupbyの使い方
Kosuke Kida
 
Pgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdw
Toshi Harada
 
Chugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pub
Toshi Harada
 
Chugokudb study-20150131
Chugokudb study-20150131
Toshi Harada
 
JSONBはPostgreSQL9.5でいかに改善されたのか
JSONBはPostgreSQL9.5でいかに改善されたのか
NTT DATA OSS Professional Services
 
Jpug study-pq 20170121
Jpug study-pq 20170121
Kosuke Kida
 
第20回 中国地方DB勉強会 in 岡山 MySQLレプリケーション
第20回 中国地方DB勉強会 in 岡山 MySQLレプリケーション
Ryusuke Kajiyama
 
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
Yuko Mori
 
20130203 OSS-DB Exam Silver 技術解説無料セミナー
20130203 OSS-DB Exam Silver 技術解説無料セミナー
Kazuko Itoda
 
pg_bigmを用いた全文検索のしくみ(前編)
pg_bigmを用いた全文検索のしくみ(前編)
NTT DATA OSS Professional Services
 
Postgre sql9.3新機能紹介
Postgre sql9.3新機能紹介
Daichi Egawa
 
Jpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pub
Toshi Harada
 
Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6
Toshi Harada
 
PostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろう
kasaharatt
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6
Toshi Harada
 
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
Insight Technology, Inc.
 
PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介
Satoshi Hirata
 
Chugokudb18_2
Chugokudb18_2
Kosuke Kida
 
Pg14_sql_standard_function_body
Pg14_sql_standard_function_body
kasaharatt
 
外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張
Shigeru Hanada
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説
Masahiko Sawada
 
PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205
Toshi Harada
 
PostgreSQLとPythonとSQL
PostgreSQLとPythonとSQL
Satoshi Yamada
 
PostgreSQL9.3新機能紹介
PostgreSQL9.3新機能紹介
NTT DATA OSS Professional Services
 
PostgreSQL 9.5 新機能紹介
PostgreSQL 9.5 新機能紹介
NTT DATA OSS Professional Services
 
DeclarativeSql
DeclarativeSql
Takaaki Suzuki
 
Plone conf 2014report by terada
Plone conf 2014report by terada
Manabu Terada
 
Plone features and trends
Plone features and trends
Takanori Suzuki
 

More Related Content

What's hot (20)

第20回 中国地方DB勉強会 in 岡山 MySQLレプリケーション
第20回 中国地方DB勉強会 in 岡山 MySQLレプリケーション
Ryusuke Kajiyama
 
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
Yuko Mori
 
20130203 OSS-DB Exam Silver 技術解説無料セミナー
20130203 OSS-DB Exam Silver 技術解説無料セミナー
Kazuko Itoda
 
pg_bigmを用いた全文検索のしくみ(前編)
pg_bigmを用いた全文検索のしくみ(前編)
NTT DATA OSS Professional Services
 
Postgre sql9.3新機能紹介
Postgre sql9.3新機能紹介
Daichi Egawa
 
Jpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pub
Toshi Harada
 
Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6
Toshi Harada
 
PostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろう
kasaharatt
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6
Toshi Harada
 
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
Insight Technology, Inc.
 
PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介
Satoshi Hirata
 
Chugokudb18_2
Chugokudb18_2
Kosuke Kida
 
Pg14_sql_standard_function_body
Pg14_sql_standard_function_body
kasaharatt
 
外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張
Shigeru Hanada
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説
Masahiko Sawada
 
PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205
Toshi Harada
 
PostgreSQLとPythonとSQL
PostgreSQLとPythonとSQL
Satoshi Yamada
 
PostgreSQL9.3新機能紹介
PostgreSQL9.3新機能紹介
NTT DATA OSS Professional Services
 
PostgreSQL 9.5 新機能紹介
PostgreSQL 9.5 新機能紹介
NTT DATA OSS Professional Services
 
DeclarativeSql
DeclarativeSql
Takaaki Suzuki
 
第20回 中国地方DB勉強会 in 岡山 MySQLレプリケーション
第20回 中国地方DB勉強会 in 岡山 MySQLレプリケーション
Ryusuke Kajiyama
 
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
Yuko Mori
 
20130203 OSS-DB Exam Silver 技術解説無料セミナー
20130203 OSS-DB Exam Silver 技術解説無料セミナー
Kazuko Itoda
 
Postgre sql9.3新機能紹介
Postgre sql9.3新機能紹介
Daichi Egawa
 
Jpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pub
Toshi Harada
 
Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6
Toshi Harada
 
PostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろう
kasaharatt
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6
Toshi Harada
 
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
Insight Technology, Inc.
 
PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介
Satoshi Hirata
 
Pg14_sql_standard_function_body
Pg14_sql_standard_function_body
kasaharatt
 
外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張
Shigeru Hanada
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説
Masahiko Sawada
 
PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205
Toshi Harada
 
PostgreSQLとPythonとSQL
PostgreSQLとPythonとSQL
Satoshi Yamada
 

Viewers also liked (8)

Plone conf 2014report by terada
Plone conf 2014report by terada
Manabu Terada
 
Plone features and trends
Plone features and trends
Takanori Suzuki
 
Dockerの利用事例
Dockerの利用事例
maebashi
 
Puppetが仲間外れにされて悲しいので、呼ばれてないのにPuppetの最新動向を話すよ
Puppetが仲間外れにされて悲しいので、呼ばれてないのにPuppetの最新動向を話すよ
Hidetoshi Ochiai
 
Docker事始めと最新動向 2015年6月
Docker事始めと最新動向 2015年6月
Emma Haruka Iwao
 
Machine Learning Basics for Web Application Developers
Machine Learning Basics for Web Application Developers
Etsuji Nakai
 
Caffeの特徴と最近の動向 -CNN、そしてRNNへ-
Caffeの特徴と最近の動向 -CNN、そしてRNNへ-
Yasuyuki Sugai
 
Internet Week 2016 脆弱性スキャナによる対策支援の課題 Vuls
Internet Week 2016 脆弱性スキャナによる対策支援の課題 Vuls
Kota Kanbe
 
Plone conf 2014report by terada
Plone conf 2014report by terada
Manabu Terada
 
Plone features and trends
Plone features and trends
Takanori Suzuki
 
Dockerの利用事例
Dockerの利用事例
maebashi
 
Puppetが仲間外れにされて悲しいので、呼ばれてないのにPuppetの最新動向を話すよ
Puppetが仲間外れにされて悲しいので、呼ばれてないのにPuppetの最新動向を話すよ
Hidetoshi Ochiai
 
Docker事始めと最新動向 2015年6月
Docker事始めと最新動向 2015年6月
Emma Haruka Iwao
 
Machine Learning Basics for Web Application Developers
Machine Learning Basics for Web Application Developers
Etsuji Nakai
 
Caffeの特徴と最近の動向 -CNN、そしてRNNへ-
Caffeの特徴と最近の動向 -CNN、そしてRNNへ-
Yasuyuki Sugai
 
Internet Week 2016 脆弱性スキャナによる対策支援の課題 Vuls
Internet Week 2016 脆弱性スキャナによる対策支援の課題 Vuls
Kota Kanbe
 
Ad

Similar to my sql-postgresql勉強会#6 LT 私的なPostgreSQLの楽しみ方 (20)

20181110 fok2018-pg-extension
20181110 fok2018-pg-extension
Toshi Harada
 
20190119 aws-study-pg-extension
20190119 aws-study-pg-extension
Toshi Harada
 
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
Shigeru Hanada
 
20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql
Toshi Harada
 
PostgreSQL 9.5 の新機能
PostgreSQL 9.5 の新機能
Shigetaka Yachi
 
20171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-10
Toshi Harada
 
20171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-10
Toshi Harada
 
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
Yasutaka Hamada
 
20190202-pgunconf-Access-Privilege-Inquiry-Functions
20190202-pgunconf-Access-Privilege-Inquiry-Functions
Toshi Harada
 
Pgunconf14 pg13-psql
Pgunconf14 pg13-psql
Toshi Harada
 
PostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL Unconference #26 No Error on PostgreSQL
Noriyoshi Shinoda
 
Gorinphp0729
Gorinphp0729
akitsukada
 
20211112_jpugcon_gpu_and_arrow
20211112_jpugcon_gpu_and_arrow
Kohei KaiGai
 
textsearch_jaで全文検索
textsearch_jaで全文検索
Akio Ishida
 
MySQLのGIS機能とか超入門 ~MyNA会2018年7月
MySQLのGIS機能とか超入門 ~MyNA会2018年7月
sakaik
 
Kof2016 postgresql-9.6
Kof2016 postgresql-9.6
Toshi Harada
 
R6パッケージの紹介―機能と実装
R6パッケージの紹介―機能と実装
__nakamichi__
 
MySQLとPostgreSQLにおける基本的なアカウント管理
MySQLとPostgreSQLにおける基本的なアカウント管理
Shinya Sugiyama
 
Rails SQL Injection Examplesの紹介
Rails SQL Injection Examplesの紹介
Hiroshi Tokumaru
 
20181110 fok2018-pg-extension
20181110 fok2018-pg-extension
Toshi Harada
 
20190119 aws-study-pg-extension
20190119 aws-study-pg-extension
Toshi Harada
 
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
Shigeru Hanada
 
20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql
Toshi Harada
 
PostgreSQL 9.5 の新機能
PostgreSQL 9.5 の新機能
Shigetaka Yachi
 
20171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-10
Toshi Harada
 
20171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-10
Toshi Harada
 
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
Yasutaka Hamada
 
20190202-pgunconf-Access-Privilege-Inquiry-Functions
20190202-pgunconf-Access-Privilege-Inquiry-Functions
Toshi Harada
 
Pgunconf14 pg13-psql
Pgunconf14 pg13-psql
Toshi Harada
 
PostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL Unconference #26 No Error on PostgreSQL
Noriyoshi Shinoda
 
20211112_jpugcon_gpu_and_arrow
20211112_jpugcon_gpu_and_arrow
Kohei KaiGai
 
textsearch_jaで全文検索
textsearch_jaで全文検索
Akio Ishida
 
MySQLのGIS機能とか超入門 ~MyNA会2018年7月
MySQLのGIS機能とか超入門 ~MyNA会2018年7月
sakaik
 
Kof2016 postgresql-9.6
Kof2016 postgresql-9.6
Toshi Harada
 
R6パッケージの紹介―機能と実装
R6パッケージの紹介―機能と実装
__nakamichi__
 
MySQLとPostgreSQLにおける基本的なアカウント管理
MySQLとPostgreSQLにおける基本的なアカウント管理
Shinya Sugiyama
 
Rails SQL Injection Examplesの紹介
Rails SQL Injection Examplesの紹介
Hiroshi Tokumaru
 
Ad

More from Toshi Harada (16)

無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々
Toshi Harada
 
Pgunconf16 toast
Pgunconf16 toast
Toshi Harada
 
20190518 27th-chugoku db-lt-pg12
20190518 27th-chugoku db-lt-pg12
Toshi Harada
 
20181122 pg con-jp-lt-logrep
20181122 pg con-jp-lt-logrep
Toshi Harada
 
20170819 ocd-l tthon-pgdev
20170819 ocd-l tthon-pgdev
Toshi Harada
 
Ntt tx-study-postgre sql-10
Ntt tx-study-postgre sql-10
Toshi Harada
 
Pgconf asia-201612203-pg reversi-ja
Pgconf asia-201612203-pg reversi-ja
Toshi Harada
 
Pgconf asia-201612203-pg reversi
Pgconf asia-201612203-pg reversi
Toshi Harada
 
Chugoku db 17th-lt-kly
Chugoku db 17th-lt-kly
Toshi Harada
 
Osc shimane-2016-do-postgres-dream-of-graph-database
Osc shimane-2016-do-postgres-dream-of-graph-database
Toshi Harada
 
Dblt#2 do-postgres-dream-of-graph-database
Dblt#2 do-postgres-dream-of-graph-database
Toshi Harada
 
Do postgres-dream-of-graph-database
Do postgres-dream-of-graph-database
Toshi Harada
 
MyNA JPUG study 20160220-postgresql-json-datatype
MyNA JPUG study 20160220-postgresql-json-datatype
Toshi Harada
 
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Toshi Harada
 
20150530 pgunconf-ycsb-jsonb
20150530 pgunconf-ycsb-jsonb
Toshi Harada
 
20150530 pgunconf-pgbench-semi-structured-benchmark
20150530 pgunconf-pgbench-semi-structured-benchmark
Toshi Harada
 
無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々
Toshi Harada
 
20190518 27th-chugoku db-lt-pg12
20190518 27th-chugoku db-lt-pg12
Toshi Harada
 
20181122 pg con-jp-lt-logrep
20181122 pg con-jp-lt-logrep
Toshi Harada
 
20170819 ocd-l tthon-pgdev
20170819 ocd-l tthon-pgdev
Toshi Harada
 
Ntt tx-study-postgre sql-10
Ntt tx-study-postgre sql-10
Toshi Harada
 
Pgconf asia-201612203-pg reversi-ja
Pgconf asia-201612203-pg reversi-ja
Toshi Harada
 
Pgconf asia-201612203-pg reversi
Pgconf asia-201612203-pg reversi
Toshi Harada
 
Chugoku db 17th-lt-kly
Chugoku db 17th-lt-kly
Toshi Harada
 
Osc shimane-2016-do-postgres-dream-of-graph-database
Osc shimane-2016-do-postgres-dream-of-graph-database
Toshi Harada
 
Dblt#2 do-postgres-dream-of-graph-database
Dblt#2 do-postgres-dream-of-graph-database
Toshi Harada
 
Do postgres-dream-of-graph-database
Do postgres-dream-of-graph-database
Toshi Harada
 
MyNA JPUG study 20160220-postgresql-json-datatype
MyNA JPUG study 20160220-postgresql-json-datatype
Toshi Harada
 
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Toshi Harada
 
20150530 pgunconf-ycsb-jsonb
20150530 pgunconf-ycsb-jsonb
Toshi Harada
 
20150530 pgunconf-pgbench-semi-structured-benchmark
20150530 pgunconf-pgbench-semi-structured-benchmark
Toshi Harada
 

Recently uploaded (7)

AI技術共有会2025-06-05_DeepResearchの理解と実践.pdf
AI技術共有会2025-06-05_DeepResearchの理解と実践.pdf
Takuma Oda
 
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
 
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
iPride Co., Ltd.
 
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
iPride Co., Ltd.
 
Protect Your IoT Data with UbiBot's Private Platform.pptx
Protect Your IoT Data with UbiBot's Private Platform.pptx
ユビボット 株式会社
 
色について.pptx .
色について.pptx .
iPride Co., Ltd.
 
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
NTT DATA Technology & Innovation
 
AI技術共有会2025-06-05_DeepResearchの理解と実践.pdf
AI技術共有会2025-06-05_DeepResearchの理解と実践.pdf
Takuma Oda
 
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
 
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
iPride Co., Ltd.
 
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
iPride Co., Ltd.
 
Protect Your IoT Data with UbiBot's Private Platform.pptx
Protect Your IoT Data with UbiBot's Private Platform.pptx
ユビボット 株式会社
 
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
NTT DATA Technology & Innovation
 

my sql-postgresql勉強会#6 LT 私的なPostgreSQLの楽しみ方

  • 1. OSS ユーザーのための勉強会 <OSS X Users Meeting> #6   PostgreSQL と MySQL Lighting-Talk 私的な PostgreSQL の楽しみ方 ぬこ@横浜 (@nuko_yokohama)
  • 3. さて、 MySQL と PostgreSQL どっち派なの?と聞かれたら 躊躇なく PostgreSQL 派と 私は答えちゃうわけですが
  • 6. ユーザ定義関数 ユーザ定義型 独自インデックス Foreign Data Wrapper Background Worker Process Custom Scan API 手続き言語ハンドラ HOOK 組込 etc ・・・
  • 9. SELECT data, data + ' 拾 ' FROM ksj_sample; data | ?column? ------------+---------------- 五百壱拾六 | 五百弐拾六 零 | 壱拾 参万壱百壱 | 参万壱百壱拾壱 (3 rows) 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) 漢数字で 四則演算や 比較演算できます
  • 11. SELECT * FROM foo WHERE data = ' 味噌らーめん '; id | data ----+-------------- 1 | 味噌ラーメン (1 row) SELECT * FROM foo WHERE data = 'postgresql'; id | data ----+---------------------- 2 | PostgreSQL (1 row) 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 ----+------ (0 rows) SELECT * FROM foo WHERE data /= ' センヌリティウス '; id | data ----+------------------ 4 | セリヌンティウス (1 row) SELECT * FROM foo WHERE data /= ' フィロストラス '; id | data ----+------------------ 5 | フィロストラトス (1 row) 日本語正規化 + typo を許容
  • 13. Neo4j Server Neo4j Foriegn Data Wrapper PostgreSQL REST I/FCypher Query JSON Result SQL PostgreSQL Record Set Cypher Query Execute Cypher Query on REST Generate PostgreSQL Record Neo4j-FDW Concept Do not convert SQL into Cypher!
  • 15. CREATE EXTENSION neo4j_fdw; CREATE EXTENSION CREATE SERVER foo FOREIGN DATA WRAPPER neo4j_fdw OPTIONS (url 'http://localhost:7474/db/data/cypher'); CREATE SERVER CREATE FOREIGN TABLE bar2 ( name text, follower_name text, follower_gender text) SERVER foo OPTIONS (query '{"query":"START n=node(*) MATCH p=n<-[]-fm RETURN n.name as name , fm.name as follower_name, fm.gender? as follower_gender " }'); CREATE FOREIGN TABLE SELECT name, follower_name, follower_gender FROM bar2; name | follower_name | follower_gender ---------+---------------+----------------- Yamato | Akagi | Famale Musashi | Yamato | Male Akagi | Hiryu | Famale Akagi | Yamato | Male Kaga | Hiryu | Famale Kaga | Musashi | Male Nagato | Mutsu | Male Nagato | Yamato | Male Mutsu | Nagato | Male Hiryu | Soryu | Famale Hiryu | Akagi | Famale Soryu | Hiryu | Famale (12 rows) グラフデータベースの ビューを定義して、 そこへ SQL で問い合わせ
  • 17. hb_worker.so Postgres server(9.3) Background Worker Process (libpq を使用 ) 【 postgresql.conf 】 shared_preload_libraries = 'hb_worker' hb_worker.conninfo = 'dbname=xxx user=yyy' psql チャネル HB_SV チャネル HB_CL NOTIFY HB_CL,' 結果 ' NOTIFY HB_SV,' 数字列 ' こんな感じ 起動 LISTEN HB_CL 起動 LISTEN HB_SV ロード・起動 数当て判定処理
  • 18. psql からの実行例 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 の応答 LOG: NOTIFY HB_CL,'2 Hit / 1 Blow.' LOG: hb_worker: NOTIFY HB_CL,'4 Hit! Conguratulatoins!, next new game.' LOG: hb_worker: set secret number=0391 (注:見やすさのために適宜改行している) psql から数当て
  • 21. [nuko]$ LOG: loaded library "hartmanhook" LOG: database system was shut down at 2014-02-16 04:45:33 PST LOG: database system is ready to accept connections LOG: autovacuum launcher started [nuko]$ psql test psql (9.3.2) Type "help" for help. test=# SELECT 1; NOTICE: Sir, yes, sir! ?column? ---------- 1 (1 row) test=# d NOTICE: Sir, yes, sir! List of relations Schema | Name | Type | Owner --------+------+-------+-------- public | test | table | harada (1 row) test=# SQL を投げると ハートマン軍曹から 罵ってもらえます (現在実装中)