Trac:Timing and Estimationプラグインを入れた後レポート作成できない件 | A Day In The Boy's Life

A Day In The Boy's Life

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

Tracの使い方 -Timing and Estimationプラグイン- 」で、プラグインを追加してみましたが、その後「チケットを見る」のメニューからレポートを新たに登録しようとするとエラーが発生します。


エラー内容は、下記


Python Traceback

Traceback (most recent call last):
File "/usr/lib/python2.3/site-packages/trac/web/main.py", line 406, in dispatch_request
dispatcher.dispatch(req)
File "/usr/lib/python2.3/site-packages/trac/web/main.py", line 237, in dispatch
resp = chosen_handler.process_request(req)
File "/usr/lib/python2.3/site-packages/trac/ticket/report.py", line 78, in process_request
self._do_create(req, db)
File "/usr/lib/python2.3/site-packages/trac/ticket/report.py", line 127, in _do_create
"VALUES (%s,%s,%s)", (title, query, description))
File "/usr/lib/python2.3/site-packages/trac/db/util.py", line 50, in execute
return self.cursor.execute(sql_escape_percent(sql), args)
File "/usr/lib/python2.3/site-packages/trac/db/util.py", line 50, in execute
return self.cursor.execute(sql_escape_percent(sql), args)
File "/usr/lib/python2.3/site-packages/pyPgSQL/PgSQL.py", line 3111, in execute
raise OperationalError, msg
OperationalError: ERROR: duplicate key violates unique constraint "report_pkey"

最後の行に、report_pkey(Primary Key)が重複していると言うエラーが出ています。

Tracのレポートは、DBのreportテーブルにより管理されています。

このテーブルのカラムであるidがレポート登録時に重複しているらしい。

ちなみに、このidはreport_id_seqというシーケンスにより番号が管理されています。


report_id_seqの現在の番号を調べてみると・・・


select last_value from report_id_seq;

last_value
----------
19

ちなみにreportテーブルに格納されているid番号の最大値は


select max(id) from report;

max
-----
25

はい。これが原因ですね。

Timing and Estimationプラグインをインストールすると幾つかレポートが追加になるのですが、その際にreport_id_seqの番号は更新されないようです。

ですので、手動でreport_id_seqの番号を変更する事で解決できます。


上記の例だと、reportテーブルに格納されているidの最大値は25のため、report_id_seqの現在の番号を26に更新します。


alter sequence report_id_seq restart 26;
ALTER SEQUENCE

これで、再度レポートの登録が行えるようになりました。