MT-3.121にアップグレードしてから(いや3.1にしてから)初めて、テンプレートの修正を試みました。が、
Use of uninitialized value in unpack at /home/httpd/cgi-bin/mt/lib/MT/ObjectDriver/DBI/postgres.pm line 13.
というようなエラーで[保存]に失敗してしまうのです。
原因は、データベース内にありました。
アップグレードスクリプトの不備に起因しているのではないかと思いますが、あんまり突っ込んで調べていません。
とりあえず、問題の修正方法ですが、次のようにすることで解決します。なお、これはPostgreSQLをバックエンドに使っている場合で、それ以外の場合には、それぞれのバックエンドのやり方で修正することになります。もっともほかのバックエンドで同様の問題があるのかないのかは不明ですが。
$ psql db (dbはあなたのMTが利用しているDB名)
psql> update mt_template set template_created_on='2004-12-16 00:00:00', template_modified_on='2004-12-16 00:00:00'
psql-> where template_created_on is NULL; (2004-12-16 00:00:00 は適当な日時を指定してください)
UPDATE 83 (83はほかの数字になるでしょう、多分)
要するに、テンプレートがいつ作られていつ修正されたかという情報がないために、エラーが発生しているわけです。おそらくこの二つのカラムは3.1にアップグレードした際に追加されたものでしょうから、追加するときに適当な値を設定しなければならないものを、しなかったからエラーになっていたというわけです。
psql> update mt_template set template_created_on='2004-12-16 00:00:00', template_modified_on='2004-12-16 00:00:00'
psql-> where template_created_on is NULL; (2004-12-16 00:00:00 は適当な日時を指定してください)
UPDATE 83 (83はほかの数字になるでしょう、多分)
追記: 同様の問題で苦労されている方が他にもいらっしゃいました(^^;
hiro
自分でコメント:
やっぱり、3.121ではひっそりと修正されていました。どうも、2004-01-01 00:00:00が挿入されるようです。
スキーマに、'not null'とか書いてあるのに、堂々と空のままアップグレードするのはDBのデザイナとperlのコーダの連絡が悪いのか、はたまた、単に凡ミスなのか(多分後者)……。
このやり方だと、多分、MySQLなどの他のDBでも問題は出るはずですね。MySQLでも、psql の代わりに mysql コマンドを使って、後、発行すべきSQLは同じですので、同様の手順でアップデートしてやってください。