新しくDrupalのサイトを構築するにあたって、あまり深く考えずにPostgreSQLの9を選んでしまった(なんでMySQLじゃないのかとかいうのには諸般の事情とお答えしておきます)のですが、動かない。
最初はさっぱり原因が分からなくて途方に暮れていたのですが、調べていくうちに大体原因がつかめた。
Drupalは色々なキャッシュデータをserializeしてbytea型のカラムに格納して保持しています。PostgreSQLの8までは、bytea型のカラムに値を格納するときはエスケープクォートして格納という形だったのが、9からはhexに変換して格納するという形にデフォルトの形式が変わりました。
これによって、chacheテーブルから取り出した値をunserializeできないというエラーになっていました。
bytea型に格納する形式を、旧来と同様な'escape'形式に変更するというのもできないことはない(ALTER DATABASE database_name SET bytea_output = 'escape')ようなのですが、他にもこのようなハマリポイントがあると厄介ですし、そのたびに検証して対策するという時間も取れそうにないので、結局のところPostgreSQLのバージョンを(実績のある)8系にすることにしました。
ちなみにDrupal 7では、この問題には対応済みのようです。