この記事は ユニークビジョン株式会社 Advent Calendar 2020 の8日目の記事です。
1.はじめに
PostgreSQLにはソースコードのcontribディレクトリ以下に拡張機能のライブラリー群があります。これらはニッチな機能であるとか実験的な機能であるなどの理由で組み込み関数には含まれていませんが、有用性に乏しいということでもないので活用できそうなものがあれば積極的に使っていくのがよいでしょう。こちらから一覧を確認できます。この記事ではcontribのライブラリ群を使えるようにする方法と、独断と偏見で選んだ有用なライブラリをいくつか紹介していきます。ちなみに想定しているPostgreSQLのバージョンは12.4です。
2.拡張を有効にする
ソースコードからbuildしたPostgreSQLを使用している場合、build時にcontribをbuildの対象に含めるような指定が必要になります。そうでない場合、基本的に使いたいライブラリ名を確認し、スーパーユーザーでCREATE EXTENSION ライブラリ名;とクエリを実行するだけで使えるようになります。例えばintarrayのライブラリを使いたい場合はこのようになります。
CREATE EXTENSION intarray;
これに追加し、各々のライブラリでセットアップの手順が指定されている場合はそれも行うという形になります。
3.intarrayモジュール
intarrayモジュールは整数の配列の操作に役立つ関数を提供してくれます。arrayをよく使うような運用をしている場合におすすめです。PostgreSQLのarray周りの関数は少し物足りない感があるので、複雑な集計をしているなどであれば役に立つのではと思います。
例えば組み込み関数だけだと配列と配列の共通部分をとるのはかなり大変です。ダイレクトでそれを返す関数がないので、unnestでそれぞれ行にバラし、intersectをかけたのちarray_aggをかけなおすなどしないといけません。intarrayモジュールでは2つのarrayを&でつなぐだけで共通部分が得られます。
ただし、整数配列でしか使えないのでそこは気をつけましょう。
4.pgcrypto
暗号化に関するライブラリーです。パスワードにソルトつけたりハッシュ化してくれる関数や、ランダムな値を返してくれる関数が入っています。バージョン4のUUIDを作ってくれるgen_random_uuid関数が便利です。よく言われていることですがこれでパスワードを暗号化する場合、DBまでの経路でのパスワードの扱いには注意した方がよいです。生のパスワードを引き回すようなことだけはないようにしましょう。
5.まとめ
contribのモジュールは、知っていなければ使おうという発想にもなかなかいかないので知っておくのは有意義かなと思います。awsのRDSなどでもサポートされているので引き出しにいれておきましょう。