SlideShare una empresa de Scribd logo
1 de 18
Descargar para leer sin conexión
Extending PostgreSQL
                           株式会社メトロシステムズ
                                    花田茂



                           PgDay 2012 Japan
                                                    2012-11-30




Copyright (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

Más contenido relacionado

La actualidad más candente

La actualidad más candente (16)

pg_bigmを用いた全文検索のしくみ(前編)
pg_bigmを用いた全文検索のしくみ(前編)pg_bigmを用いた全文検索のしくみ(前編)
pg_bigmを用いた全文検索のしくみ(前編)
 
ET2016 組込みシステムに適した コンポーネントシステムTECSの最新状況
ET2016 組込みシステムに適したコンポーネントシステムTECSの最新状況ET2016 組込みシステムに適したコンポーネントシステムTECSの最新状況
ET2016 組込みシステムに適した コンポーネントシステムTECSの最新状況
 
NXT開発環境(ETロボコン向けTOPPERS活用セミナー5)
NXT開発環境(ETロボコン向けTOPPERS活用セミナー5)NXT開発環境(ETロボコン向けTOPPERS活用セミナー5)
NXT開発環境(ETロボコン向けTOPPERS活用セミナー5)
 
Postgre sql9.3新機能紹介
Postgre sql9.3新機能紹介Postgre sql9.3新機能紹介
Postgre sql9.3新機能紹介
 
PostgreSQL9.3新機能紹介
PostgreSQL9.3新機能紹介PostgreSQL9.3新機能紹介
PostgreSQL9.3新機能紹介
 
TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)
TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)
TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)
 
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
 
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@KyotoPostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
 
Mindstorms NXT用 toppersプラットフォームの概要(ETロボコン向けTOPPERS活用セミナー1)
Mindstorms NXT用 toppersプラットフォームの概要(ETロボコン向けTOPPERS活用セミナー1)Mindstorms NXT用 toppersプラットフォームの概要(ETロボコン向けTOPPERS活用セミナー1)
Mindstorms NXT用 toppersプラットフォームの概要(ETロボコン向けTOPPERS活用セミナー1)
 
カーネルオブジェクト(ETロボコン向けTOPPERS活用セミナー2-2)
カーネルオブジェクト(ETロボコン向けTOPPERS活用セミナー2-2)カーネルオブジェクト(ETロボコン向けTOPPERS活用セミナー2-2)
カーネルオブジェクト(ETロボコン向けTOPPERS活用セミナー2-2)
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説
 
OSS-DB Silver ポイント解説セミナー ~SQL編~ (PostgreSQL9.0)
OSS-DB Silver ポイント解説セミナー ~SQL編~ (PostgreSQL9.0)OSS-DB Silver ポイント解説セミナー ~SQL編~ (PostgreSQL9.0)
OSS-DB Silver ポイント解説セミナー ~SQL編~ (PostgreSQL9.0)
 
PostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラPostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラ
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
 
TOPPERS TECS WG 2016
TOPPERS TECS WG 2016TOPPERS TECS WG 2016
TOPPERS TECS WG 2016
 
Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6
 

Destacado

Destacado (6)

PostgreSQL開発ことはじめ - 第27回しくみ+アプリケーション勉強会
PostgreSQL開発ことはじめ - 第27回しくみ+アプリケーション勉強会PostgreSQL開発ことはじめ - 第27回しくみ+アプリケーション勉強会
PostgreSQL開発ことはじめ - 第27回しくみ+アプリケーション勉強会
 
OSS-DB Goldへの第一歩~実践!運用管理~
OSS-DB Goldへの第一歩~実践!運用管理~OSS-DB Goldへの第一歩~実践!運用管理~
OSS-DB Goldへの第一歩~実践!運用管理~
 
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
 
Foreign Data Wrapper Enhancements
Foreign Data Wrapper EnhancementsForeign Data Wrapper Enhancements
Foreign Data Wrapper Enhancements
 
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
 
まずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニングまずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニング
 

Similar a Extending PostgreSQL - PgDay 2012 Japan

C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
Insight Technology, Inc.
 
20120822_dstn技術交流会_dstnのご紹介と最新技術情報
20120822_dstn技術交流会_dstnのご紹介と最新技術情報20120822_dstn技術交流会_dstnのご紹介と最新技術情報
20120822_dstn技術交流会_dstnのご紹介と最新技術情報
dstn
 
[B22] PostgresPlus Advanced Server の Oracle Database 互換機能検証 by Noriyoshi Shinoda
[B22] PostgresPlus Advanced Server の Oracle Database 互換機能検証 by Noriyoshi Shinoda[B22] PostgresPlus Advanced Server の Oracle Database 互換機能検証 by Noriyoshi Shinoda
[B22] PostgresPlus Advanced Server の Oracle Database 互換機能検証 by Noriyoshi Shinoda
Insight Technology, Inc.
 
jBOLT Ver3.2
jBOLT Ver3.2jBOLT Ver3.2
jBOLT Ver3.2
skudoh
 

Similar a Extending PostgreSQL - PgDay 2012 Japan (20)

20180630 data transformationusinglogicflow
20180630 data transformationusinglogicflow20180630 data transformationusinglogicflow
20180630 data transformationusinglogicflow
 
20130203 oss-db-lpi
20130203 oss-db-lpi20130203 oss-db-lpi
20130203 oss-db-lpi
 
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう  by SRA OSS, Inc. 日本支社 高塚遥[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう  by SRA OSS, Inc. 日本支社 高塚遥
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
 
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
 
20120822_dstn技術交流会_dstnのご紹介と最新技術情報
20120822_dstn技術交流会_dstnのご紹介と最新技術情報20120822_dstn技術交流会_dstnのご紹介と最新技術情報
20120822_dstn技術交流会_dstnのご紹介と最新技術情報
 
[db tech showcase Tokyo 2014] C31: PostgreSQLをエンタープライズシステムで利用しよう by PostgreS...
[db tech showcase Tokyo 2014] C31: PostgreSQLをエンタープライズシステムで利用しよう  by PostgreS...[db tech showcase Tokyo 2014] C31: PostgreSQLをエンタープライズシステムで利用しよう  by PostgreS...
[db tech showcase Tokyo 2014] C31: PostgreSQLをエンタープライズシステムで利用しよう by PostgreS...
 
[B22] PostgresPlus Advanced Server の Oracle Database 互換機能検証 by Noriyoshi Shinoda
[B22] PostgresPlus Advanced Server の Oracle Database 互換機能検証 by Noriyoshi Shinoda[B22] PostgresPlus Advanced Server の Oracle Database 互換機能検証 by Noriyoshi Shinoda
[B22] PostgresPlus Advanced Server の Oracle Database 互換機能検証 by Noriyoshi Shinoda
 
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
 
ADO.NET Entity Framework
ADO.NET Entity Framework ADO.NET Entity Framework
ADO.NET Entity Framework
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version - ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
 
jBOLT Ver3.2
jBOLT Ver3.2jBOLT Ver3.2
jBOLT Ver3.2
 
1st step LogicFlow
1st step LogicFlow1st step LogicFlow
1st step LogicFlow
 
BPStudy20121221
BPStudy20121221BPStudy20121221
BPStudy20121221
 
Deep Learning Lab - Microsoft Machine Learning meetup 2018/06/27 - 推論編
Deep Learning Lab - Microsoft Machine Learning meetup 2018/06/27 - 推論編Deep Learning Lab - Microsoft Machine Learning meetup 2018/06/27 - 推論編
Deep Learning Lab - Microsoft Machine Learning meetup 2018/06/27 - 推論編
 
Ansibleはじめよぉ -Infrastructure as Codeを理解-
Ansibleはじめよぉ -Infrastructure as Codeを理解-Ansibleはじめよぉ -Infrastructure as Codeを理解-
Ansibleはじめよぉ -Infrastructure as Codeを理解-
 
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造
 
20180929 lowcode developlogicflow
20180929 lowcode developlogicflow20180929 lowcode developlogicflow
20180929 lowcode developlogicflow
 

Último

Último (10)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介: 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
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: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...
 
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
 
論文紹介: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
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

Extending PostgreSQL - PgDay 2012 Japan

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