SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Downloaden Sie, um offline zu lesen
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 の
好きなところです
時間が余ったら
デモします
おしまい

Weitere ähnliche Inhalte

Was ist angesagt?

PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
Insight Technology, Inc.
 

Was ist angesagt? (20)

第20回 中国地方DB勉強会 in 岡山 MySQLレプリケーション
第20回 中国地方DB勉強会 in 岡山 MySQLレプリケーション第20回 中国地方DB勉強会 in 岡山 MySQLレプリケーション
第20回 中国地方DB勉強会 in 岡山 MySQLレプリケーション
 
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
DynamoDB   MyNA・JPUG合同DB勉強会 in 東京DynamoDB   MyNA・JPUG合同DB勉強会 in 東京
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
 
20130203 OSS-DB Exam Silver 技術解説無料セミナー
20130203 OSS-DB Exam Silver 技術解説無料セミナー20130203 OSS-DB Exam Silver 技術解説無料セミナー
20130203 OSS-DB Exam Silver 技術解説無料セミナー
 
pg_bigmを用いた全文検索のしくみ(前編)
pg_bigmを用いた全文検索のしくみ(前編)pg_bigmを用いた全文検索のしくみ(前編)
pg_bigmを用いた全文検索のしくみ(前編)
 
Postgre sql9.3新機能紹介
Postgre sql9.3新機能紹介Postgre sql9.3新機能紹介
Postgre sql9.3新機能紹介
 
Jpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pubJpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pub
 
Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6
 
PostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろうPostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろう
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6
 
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
 
PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介
 
Chugokudb18_2
Chugokudb18_2Chugokudb18_2
Chugokudb18_2
 
Pg14_sql_standard_function_body
Pg14_sql_standard_function_bodyPg14_sql_standard_function_body
Pg14_sql_standard_function_body
 
外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説
 
PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205
 
PostgreSQLとPythonとSQL
PostgreSQLとPythonとSQLPostgreSQLとPythonとSQL
PostgreSQLとPythonとSQL
 
PostgreSQL9.3新機能紹介
PostgreSQL9.3新機能紹介PostgreSQL9.3新機能紹介
PostgreSQL9.3新機能紹介
 
PostgreSQL 9.5 新機能紹介
PostgreSQL 9.5 新機能紹介PostgreSQL 9.5 新機能紹介
PostgreSQL 9.5 新機能紹介
 
DeclarativeSql
DeclarativeSqlDeclarativeSql
DeclarativeSql
 

Andere mochten auch

Dockerの利用事例
Dockerの利用事例Dockerの利用事例
Dockerの利用事例
maebashi
 

Andere mochten auch (9)

Plone conf 2014report by terada
Plone conf 2014report by teradaPlone conf 2014report by terada
Plone conf 2014report by terada
 
Plone features and trends
Plone features and trendsPlone features and trends
Plone features and trends
 
Dockerの利用事例
Dockerの利用事例Dockerの利用事例
Dockerの利用事例
 
Puppetが仲間外れにされて悲しいので、呼ばれてないのにPuppetの最新動向を話すよ
 Puppetが仲間外れにされて悲しいので、呼ばれてないのにPuppetの最新動向を話すよ Puppetが仲間外れにされて悲しいので、呼ばれてないのにPuppetの最新動向を話すよ
Puppetが仲間外れにされて悲しいので、呼ばれてないのにPuppetの最新動向を話すよ
 
Docker事始めと最新動向 2015年6月
Docker事始めと最新動向 2015年6月Docker事始めと最新動向 2015年6月
Docker事始めと最新動向 2015年6月
 
Machine Learning Basics for Web Application Developers
Machine Learning Basics for Web Application DevelopersMachine Learning Basics for Web Application Developers
Machine Learning Basics for Web Application Developers
 
Caffeの特徴と最近の動向 -CNN、そしてRNNへ-
Caffeの特徴と最近の動向 -CNN、そしてRNNへ-Caffeの特徴と最近の動向 -CNN、そしてRNNへ-
Caffeの特徴と最近の動向 -CNN、そしてRNNへ-
 
Internet Week 2016 脆弱性スキャナによる対策支援の課題 Vuls
Internet Week 2016 脆弱性スキャナによる対策支援の課題 VulsInternet Week 2016 脆弱性スキャナによる対策支援の課題 Vuls
Internet Week 2016 脆弱性スキャナによる対策支援の課題 Vuls
 
国産業務PaaSを担いで稼ぐ方法 ~SIerの生き残る道の1つとなるか? ~
国産業務PaaSを担いで稼ぐ方法 ~SIerの生き残る道の1つとなるか? ~国産業務PaaSを担いで稼ぐ方法 ~SIerの生き残る道の1つとなるか? ~
国産業務PaaSを担いで稼ぐ方法 ~SIerの生き残る道の1つとなるか? ~
 

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

Rails SQL Injection Examplesの紹介
Rails SQL Injection Examplesの紹介Rails SQL Injection Examplesの紹介
Rails SQL Injection Examplesの紹介
Hiroshi Tokumaru
 

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

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

Mehr von Toshi Harada

Mehr von Toshi Harada (16)

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

Kürzlich hochgeladen

Kürzlich hochgeladen (10)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 

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 を投げると ハートマン軍曹から 罵ってもらえます (現在実装中)