Extending PostgreSQL - PgDay 2012 Japan
Upcoming SlideShare
Loading in...5
×
 

Extending PostgreSQL - PgDay 2012 Japan

on

  • 2,704 views

2012-11-30 に開催された PgDay 2012 Japan での発表で使用したスライドです。

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

Statistics

Views

Total Views
2,704
Views on SlideShare
2,702
Embed Views
2

Actions

Likes
1
Downloads
9
Comments
1

2 Embeds 2

https://si0.twimg.com 1
https://twitter.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • 資料、ありがとうございます。簡潔にまとまっていて、機能拡張についてよくわかりました。
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Extending PostgreSQL - PgDay 2012 Japan Extending PostgreSQL - PgDay 2012 Japan Presentation Transcript

  • Extending PostgreSQL 株式会社メトロシステムズ 花田茂 PgDay 2012 Japan 2012-11-30Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved 1
  • 自己紹介 氏名 :花田 茂 所属 :株式会社メトロシステムズ メール :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
  • 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
  • 関数/集約 特徴 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
  • 演算子 特徴 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
  • データ型 特徴 ビジネスオブジェトを表すデータ型を追加可能 新しいデータ型を処理する関数群を事前に定義 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
  • インデックス 特徴 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
  • 手続き言語 特徴 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
  • フック関数 特徴 PostgreSQLの内部処理に直接手を入れることが可能(特定箇所のみ) C言語で関数を記述し、共有オブジェクトのロード時に登録 プランナやエグゼキュータの処理をカスタマイズできる PostgreSQLの内部処理の理解が必要でハードルはかなり高め 使用例 •pg_statsinfo •SQLコマンドの実行に割り込み性能情報を自動的に取得 •pgFoundryで配布 (http://pgstatsinfo.projects.pgfoundry.org/ ) 9 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved
  • 外部データラッパ 特徴 外部データを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 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved
  • エクステンション 関数やその他のオブジェクトがバラバラにあると 管理しづらいので… EXTENSIONでパッケージ化しましょう 12 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved
  • エクステンション 関数やその他のオブジェクトがバラバラにあると 管理しづらいので… EXTENSIONでパッケージ化しましょう EXTENSIONとは? • 複数のオブジェクトを統合して管理 • アンインストール用のSQLスクリプトは不要 • pg_dumpによる移行やアップグレードもサポート • contribモジュールはほとんどがEXTENSION化済み 13 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved
  • 既存の拡張モジュールは… いくつかのサイトで公開/配布されています 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
  • NOT FOUND? それでも欲しい機能がなければ… 15 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved
  • NOT FOUND? それでも欲しい機能がなければ… コミュニティに提案してみる! 16 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved
  • NOT FOUND? それでも欲しい機能がなければ… コミュニティに提案してみる! • 欲しい機能をMLや掲示板に書いてみる �誰かエスカレーションしてくれるかも • 本家(英語)のMLやIRCで相談 �興味を引けば話は早いかも • パッチを書いて提案する(最終手段) �同じ問題で困っている人がいるかも 17 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved
  • おわり ご清聴ありがとうございました。 質問などがあれば @s87 までお気軽にどうぞ 18 Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved