18
Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved 1 Extending PostgreSQL 株式会社メトロシステムズ 花田茂 PgDay 2012 Japan 2012-11-30

Extending PostgreSQL - PgDay 2012 Japan

Embed Size (px)

DESCRIPTION

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

Citation preview

Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved 1

Extending PostgreSQL

株式会社メトロシステムズ花田茂

PgDay 2012 Japan2012-11-30

Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved 2

自己紹介

氏名 :花田 茂所属 :株式会社メトロシステムズメール :[email protected] :@s87ブログ :http://d.hatena.ne.jp/s87/経歴 : 最初はOracleエンジニア PostgreSQLの性能検証や周辺ツールの開発 PostgreSQL本体開発(外部テーブルサポートなど) pgCon2012開発者会議@Ottawa参加

Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved 3

関数 SQLから呼び出す関数を追加 pg_sleep()、dblink_query()など

データ型 業務データを表現するデータ型を追加 ISBN、IPアドレス、幾何図形、XMLなど

インデックス データ特性に適したインデックスを追加 B-Tree、GIN、GiSTなど

PL/Perl、PL/pgSQLなどPL/Perl、PL/pgSQLなど手続き言語 関数を実装する新しい言語を追加

フック関数 PostgreSQL内部に独自処理を追加/置換 auto_explainなど

外部データラッパ 外部データを通常の表と同様に検索 file_fdwなど

PostgreSQLに含まれる同種のもの

PostgreSQLの拡張性

PostgreSQLには、いくつかの機能拡張の仕組みがあります

PostgreSQLに備わった機能拡張の仕組み概要

演算子 データ型に応じた演算子を追加 幾何演算など

集約 集約関数を追加 max()、sum()、count()など

Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved 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/)

Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved 5

特徴

演算子

SQL文で使える演算子を追加可能内部的には関数のシンタックスシュガー事前に定義した関数をCREATE OPERATOR文で演算子に割り当てる非演算データ型でのオーバーロードも可能COMUTATOR、NAGATORなどの最適化オプション指定が可能

使用例 •parray_gin•文字列配列の部分一致検索をサポートする演算子を提供•PGXNで配布(http://pgxn.org/dist/parray_gin/)

Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved 6

特徴

データ型

ビジネスオブジェトを表すデータ型を追加可能新しいデータ型を処理する関数群を事前に定義CREATE TYPE文でカタログに登録データ型に応じた演算子を定義するとより便利に

使用例 •ksj•直接演算可能な漢数字型(例: 五百拾六+二百参=七百拾九)•githubで公開(https://github.com/nuko-yokohama/ksj)

•PostGIS•地理情報の処理に適したデータ型•プロジェクトサイトで配布(http://postgis.refractions.net)

Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved 7

特徴

インデックス

B-TreeやGIN、GiSTとは別にインデックスを追加可能インデックス用の関数や演算子クラスを定義した後、pg_amに行を追加CREATE INDEX文のUSING句に新しいインデックスを指定PostgreSQLのインデックス機構の把握が必要でハードルは高め

使用例 •textsearch_ja•sennaやgroongaをエンジンに使った日本語全文検索機能•pgFoundryで配布(http://textsearch-ja.projects.pgfoundry.org/)

Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved 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/)

Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved 9

特徴

フック関数

PostgreSQLの内部処理に直接手を入れることが可能(特定箇所のみ)C言語で関数を記述し、共有オブジェクトのロード時に登録プランナやエグゼキュータの処理をカスタマイズできるPostgreSQLの内部処理の理解が必要でハードルはかなり高め

使用例 •pg_statsinfo•SQLコマンドの実行に割り込み性能情報を自動的に取得•pgFoundryで配布(http://pgstatsinfo.projects.pgfoundry.org/)

Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved 10

特徴

外部データラッパ

外部データをSELECT文で参照可能C言語でハンドラ関数やオプション検証関数を記述基本的には列ごとの文字列データが取得できれば対応可能

使用例 •mongo_fdw•Mongo DBの内容をPostgreSQLへのSELECT文で取得可能•PGXNで配布(http://pgxn.org/dist/mongo_fdw/)

•pgsql_fdw•外部のPostgreSQLの内容をSELECT文で取得可能•SourceForgeで配布(http://interdbconnect.sourceforge.net/)

WHERE句の条件をリモートに渡すことも可能

リモートへの書き込みやトランザクションマッピングは未サポート

Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved 11

エクステンション

関数やその他のオブジェクトがバラバラにあると管理しづらいので…

Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved 12

エクステンション

関数やその他のオブジェクトがバラバラにあると管理しづらいので…

EXTENSIONでパッケージ化しましょう

Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved 13

エクステンション

関数やその他のオブジェクトがバラバラにあると管理しづらいので…

EXTENSIONでパッケージ化しましょう

EXTENSIONとは?• 複数のオブジェクトを統合して管理• アンインストール用のSQLスクリプトは不要• pg_dumpによる移行やアップグレードもサポート• contribモジュールはほとんどがEXTENSION化済み

Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved 14

いくつかのサイトで公開/配布されています

既存の拡張モジュールは…

pgFoundry

PGXN

SourceForge/github/

Google Code

PostgreSQL公式(?)の外部プロジェクトホスティングサイトhttp://pgfoundry.org/

一般的なプロジェクトホスティングサイトhttp://sourceforge.org/、http://github.com/http://code.google.com/intl/ja-JP/

EXTENSIONを配布するサイトで、拡張機能をCPANライクなコマンドでインストール可能http://pgxn.org/

Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved 15

NOT FOUND?

それでも欲しい機能がなければ…

Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved 16

NOT FOUND?

それでも欲しい機能がなければ…コミュニティに提案してみる!

Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved 17

NOT FOUND?

それでも欲しい機能がなければ…コミュニティに提案してみる!

•欲しい機能をMLや掲示板に書いてみる�誰かエスカレーションしてくれるかも

•本家(英語)のMLやIRCで相談�興味を引けば話は早いかも

•パッチを書いて提案する(最終手段)�同じ問題で困っている人がいるかも

Copyright (C) 2012 Metro Systems Co., Ltd All Rights Reserved 18

おわり

ご清聴ありがとうございました。

質問などがあれば@s87

までお気軽にどうぞ