Extending PostgreSQL - PgDay 2012 Japan

3,563 views

Published on

2012-11-30 に開催された PgDay 2012 Japan での発表で使用したスライドです。
PostgreSQLの機能拡張基盤についての紹介です。

Published in: Technology
1 Comment
1 Like
Statistics
Notes
  • 資料、ありがとうございます。簡潔にまとまっていて、機能拡張についてよくわかりました。
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
3,563
On SlideShare
0
From Embeds
0
Number of Embeds
33
Actions
Shares
0
Downloads
11
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

Extending PostgreSQL - PgDay 2012 Japan

  1. 1. Extending PostgreSQL 株式会社メトロシステムズ 花田茂 PgDay 2012 Japan 2012-11-30Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved 1
  2. 2. 自己紹介 氏名 :花田 茂 所属 :株式会社メトロシステムズ メール :shigeru.hanada@gmail.com twitter :@s87 ブログ :http://d.hatena.ne.jp/s87/ 経歴 : 最初はOracleエンジニア PostgreSQLの性能検証や周辺ツールの開発 PostgreSQL本体開発(外部テーブルサポートなど) pgCon2012開発者会議@Ottawa参加 2 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved
  3. 3. PostgreSQLの拡張性 PostgreSQLには、いくつかの 機能拡張の仕組みがあります PostgreSQLに備わった機能拡張の仕組み 概要 PostgreSQLに含まれる同種のもの 関数 SQLから呼び出す関数を追加 pg_sleep()、dblink_query()など 集約 集約関数を追加 max()、sum()、count()など 演算子 データ型に応じた演算子を追加 幾何演算など データ型 業務データを表現するデータ型を追加 ISBN、IPアドレス、幾何図形、XMLなど インデックス データ特性に適したインデックスを追加 B-Tree、GIN、GiSTなど 手続き言語 関数を実装する新しい言語を追加 PL/Perl、PL/pgSQLなど フック関数 PostgreSQL内部に独自処理を追加/置換 auto_explainなど 外部データラッパ 外部データを通常の表と同様に検索 file_fdwなど 3 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved
  4. 4. 関数/集約 特徴 SQL文で事前に定義した処理を利用可能 C言語、SQL、PL/pgSQLをサポート(Tcl、Python、Perlも可) CREATE FUNCTION文でカタログに登録 配列を含むSQLデータ型が利用可能で、戻り値は複数列/複数行も可 ユーザ定義の集約関数も追加可能 トランザクション制御(COMMIT/ROLLBACK)はできない 使用例 •Orafce •Oracleの標準関数をPostgreSQLに移植したもの •PGXNで配布(http://pgxn.org/dist/orafce/) •json_accessors •JSON型(9.2〜)へのアクセスを容易にする関数群 •PGXNで配布(http://pgxn.org/dist/json_accessors/ ) 4 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved
  5. 5. 演算子 特徴 SQL文で使える演算子を追加可能 内部的には関数のシンタックスシュガー 事前に定義した関数をCREATE OPERATOR文で演算子に割り当てる 非演算データ型でのオーバーロードも可能 COMUTATOR、NAGATORなどの最適化オプション指定が可能 使用例 •parray_gin •文字列配列の部分一致検索をサポートする演算子を提供 •PGXNで配布(http://pgxn.org/dist/parray_gin/ ) 5 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved
  6. 6. データ型 特徴 ビジネスオブジェトを表すデータ型を追加可能 新しいデータ型を処理する関数群を事前に定義 CREATE TYPE文でカタログに登録 データ型に応じた演算子を定義するとより便利に 使用例 •ksj •直接演算可能な漢数字型(例: 五百拾六+二百参=七百拾九) •githubで公開(https://github.com/nuko-yokohama/ksj) •PostGIS •地理情報の処理に適したデータ型 •プロジェクトサイトで配布(http://postgis.refractions.net ) 6 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved
  7. 7. インデックス 特徴 B-TreeやGIN、GiSTとは別にインデックスを追加可能 インデックス用の関数や演算子クラスを定義した後、pg_amに行を追加 CREATE INDEX文のUSING句に新しいインデックスを指定 PostgreSQLのインデックス機構の把握が必要でハードルは高め 使用例 •textsearch_ja •sennaやgroongaをエンジンに使った日本語全文検索機能 •pgFoundryで配布(http://textsearch- ja.projects.pgfoundry.org/ ) 7 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved
  8. 8. 手続き言語 特徴 PL/pgSQLやPL/Perlのような手続き言語を追加可能 処理に向いた言語で関数を実装できるようになる ハンドラ関数を定義してからCREATE LANGUAGE文でカタログに登録 言語処理系の理解が必要でハードルは高め 使用例 •PL/v8 •JavaScriptで関数を記述できる •Google Codeで配布(http://code.google.com/p/plv8js/) •PL/R •Rの処理をPostgreSQLから実行できる •個人サイトで配布(http://joeconway.com/plr/ ) 8 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved
  9. 9. フック関数 特徴 PostgreSQLの内部処理に直接手を入れることが可能(特定箇所のみ) C言語で関数を記述し、共有オブジェクトのロード時に登録 プランナやエグゼキュータの処理をカスタマイズできる PostgreSQLの内部処理の理解が必要でハードルはかなり高め 使用例 •pg_statsinfo •SQLコマンドの実行に割り込み性能情報を自動的に取得 •pgFoundryで配布 (http://pgstatsinfo.projects.pgfoundry.org/ ) 9 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved
  10. 10. 外部データラッパ 特徴 外部データをSELECT文で参照可能 C言語でハンドラ関数やオプション検証関数を記述 基本的には列ごとの文字列データが取得できれば対応可能 WHERE句の条件をリモートに渡すことも可能 リモートへの書き込みやトランザクションマッピングは未サポート 使用例 •mongo_fdw •Mongo DBの内容をPostgreSQLへのSELECT文で取得可能 •PGXNで配布(http://pgxn.org/dist/mongo_fdw/ ) •pgsql_fdw •外部のPostgreSQLの内容をSELECT文で取得可能 •SourceForgeで配布 (http://interdbconnect.sourceforge.net/) 10 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved
  11. 11. エクステンション 関数やその他のオブジェクトがバラバラにあると 管理しづらいので… 11 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved
  12. 12. エクステンション 関数やその他のオブジェクトがバラバラにあると 管理しづらいので… EXTENSIONでパッケージ化しましょう 12 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved
  13. 13. エクステンション 関数やその他のオブジェクトがバラバラにあると 管理しづらいので… EXTENSIONでパッケージ化しましょう EXTENSIONとは? • 複数のオブジェクトを統合して管理 • アンインストール用のSQLスクリプトは不要 • pg_dumpによる移行やアップグレードもサポート • contribモジュールはほとんどがEXTENSION化済み 13 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved
  14. 14. 既存の拡張モジュールは… いくつかのサイトで公開/配布されています PostgreSQL公式(?)の外部プロジェクトホ pgFoundry スティングサイト http://pgfoundry.org/ SourceForge/ 一般的なプロジェクトホスティングサイト github/ http://sourceforge.org/、http://github.com/ Google Code http://code.google.com/intl/ja-JP/ EXTENSIONを配布するサイトで、拡張機能を PGXN CPANライクなコマンドでインストール可能 http://pgxn.org/ 14 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved
  15. 15. NOT FOUND? それでも欲しい機能がなければ… 15 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved
  16. 16. NOT FOUND? それでも欲しい機能がなければ… コミュニティに提案してみる! 16 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved
  17. 17. NOT FOUND? それでも欲しい機能がなければ… コミュニティに提案してみる! • 欲しい機能をMLや掲示板に書いてみる �誰かエスカレーションしてくれるかも • 本家(英語)のMLやIRCで相談 �興味を引けば話は早いかも • パッチを書いて提案する(最終手段) �同じ問題で困っている人がいるかも 17 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved
  18. 18. おわり ご清聴ありがとうございました。 質問などがあれば @s87 までお気軽にどうぞ 18 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved

×