これ、まじ焦りまくりです。最近この blog が動いているサーバを FreeBSD5.2 に完全に入れ替えたのですが、今日ちょっと記事を書いてみようと思ってガツガツ書いて「ほいっ SAVE」ってやったら、以下のエラーが(汗)
Saving entry failed: ERROR: ExecInsert: Fail to add null value in not null attribute entry_id
Google 先生に聞いてもあまり前例がないようで、もうテンパイでした...
でもエラーをよーく読むとどうやら entry_id 周りがおかしいわけで、そうなると DB に原因があると思えるわけです。
# ちなみに MT の管理画面はこの時点でもちゃんと表示されてました。
で、いざ DB を覗いていみると
「あれっ!? table は存在しているのに sequence が一つもない」
こ、これが原因かー。つまり sequence ないのでエントリーを新規に追加するとき、DB 側で最新の entry_id が参照できていないってことですな。
ふむ。これを解決するには手段は2つ。
1. サーバを入れ替える前のバックアップからリストア
2. 手動で sequence を作る
1 だともう既に幾つかエントリーやコメントがあるので、ちょっと微妙... ってことで手動で sequence を追加することにしました。やり方は簡単。こんな感じです。
db=# CREATE SEQUENCE mt_author_id;
db=# CREATE SEQUENCE mt_blog_id;
db=# CREATE SEQUENCE mt_category_id;
・・・
select setval('mt_author_id',(select max(author_id) from mt_author));
select setval('mt_blog_id',(select max(blog_id) from mt_blog));
select setval('mt_category_id',(select max(category_id) from mt_category));
・・・
こんな感じで、blog の DB にある table に対して全部 sequence を作成します。その後、MT の DB 用ユーザに権限を与えておくのを忘れずに。
こんな感じで、とにかく解決しました。



