PostgreSQL8.3にバージョンアップしたらTracが動かなくなった | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

Trac0.10の環境で、最新版のPostgreSQL8.3に移行してみたらTracが動かなくなった・・・。

出てくるエラーはこんな感じ。


Traceback (most recent call last):
File "/usr/lib/python2.4/site-packages/trac/web/main.py", line 406, in dispatch_request
dispatcher.dispatch(req)
File "/usr/lib/python2.4/site-packages/trac/web/main.py", line 237, in dispatch
resp = chosen_handler.process_request(req)
File "/usr/lib/python2.4/site-packages/trac/ticket/web_ui.py", line 313, in process_request
get_reporter_id(req, 'author'))
File "/usr/lib/python2.4/site-packages/trac/ticket/web_ui.py", line 630, in _insert_ticket_data
for change in self.grouped_changelog_entries(ticket, db):
File "/usr/lib/python2.4/site-packages/trac/ticket/web_ui.py", line 677, in grouped_changelog_entries
changelog = ticket.get_changelog(when=when, db=db)
File "/usr/lib/python2.4/site-packages/trac/ticket/model.py", line 296, in get_changelog
"ORDER BY time", (self.id, str(self.id), self.id))
File "/usr/lib/python2.4/site-packages/trac/db/util.py", line 50, in execute
return self.cursor.execute(sql_escape_percent(sql), args)
File "/usr/lib/python2.4/site-packages/trac/db/util.py", line 50, in execute
return self.cursor.execute(sql_escape_percent(sql), args)
File "/usr/lib/python2.4/site-packages/pyPgSQL/PgSQL.py", line 3111, in execute
raise OperationalError, msg
OperationalError: ERROR: operator does not exist: text = integer at character 241
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. 

どうやら調べてみると、PostgreSQL8.3からテキスト型への自動キャストがなくなったようだ。


参考: PostgreSQL 8.3 に関する技術情報 @ SRA


確かにPostgreSQLのログを見てみるとTracから実行されているSQLで、テキスト型のカラムに対して数値を指定して実行しようとしてました。(シングルコーテーションで括っていない)


また、Tracの公式ページ にも書かれていますが、PostgreSQL8.3を使いたい場合は、Trac0.11以上のバージョンでないとダメみたいですね。


Warning: PostgreSQL 8.3 uses a strict type checking mechanism. To use Trac with the 8.3 Version of PostgreSQL, you will need trac-0.11 or later. 

次は、Trac0.10からTrac0.11へのバージョンアップネタかな・・・。