OpenLDAP back-sqlにおけるPostgreSQLのtext型の利用


先日、OpenLDAPのback-sqlの使い方について解説してみたのですが、その際にちょっと気になっていたことがありました。OpenLDAPのサンプルのSQLに引きづられて文字列型にvarchar型を利用していたのですが、実際のところ互換性の話を考えなければ、PostgreSQLでvarchar型を使う理由はあまりありません。むしろ効率などの面でもPostgreSQLではtext型の方がオススメです。

というわけで、back-sqlのテーブルのvarchar型を全てtext型に変更してみました。たとえば、edupersonのテーブルは次のようになります。

さらに、back-sqlが内部的に用いるテーブルであるldap_attr_mappings, ldap_entries, ldap_entry_objclasses, ldap_oc_mappings内のvarchar型もtext型に直してみました。たとえば、ldap_attr_mappingsは次のようになります。

これでデータベースを作りなおしてみたところ、問題なく動作しました。もし、現用の環境をそのまま変更したいのであれば、バックアップ(もしくはVMのスナップショット)を取った上で、slapdを停止すれば、alter tableで型の変更が可能です。たとえば、

のように実行すれば(この例はedupersonのuidを変更する場合)、データは保ったままtext型に変更可能です。なお、edupersonのuidにはNOT NULLの制約がありますが、これはそのままtext型に変更しても受け継がれます。

これで、根拠の無いvarcharの文字数指定がなくなってすっきりしました。

以前、802.1X用のFreeRadiusのバックエンドにPostgreSQLを用いた際も、サンプルのSQLをほぼそのまま使ったらセッションIDをしまう部分がvarchar(32)型で、新しく導入したCiscoのAPが返すセッションID(33文字)を格納しきれずにvarchar(64)型にalter tableしたことを思い出します(本当はtext型にalter tableしたかったのだけれども、動いているシステムにそれを行うのは怖いので、varchar型の文字数を変えるにとどめました)。

こういうソフトのバックエンドにPostgreSQLを使われる開発者の方は、開発の段階でvarchar型ではなくtext型を使ってほしい…と個人的には思ってます。

OpenLDAP back-sqlにおけるPostgreSQLのtext型の利用」への1件のフィードバック

  1. ピンバック: Shibboleth IdPのログをPostgreSQLに格納する | 慶應義塾ITC本部・技術メモ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です