日本製のオープンソースECソフト、EC-CUBE 2.3.3 を MySQL で使おうとしたけれど、配送設定で複数の配送時間を登録しようとするとエラーが起きてログイン画面に遷移してしまう。PostgreSQL に変えてみてからは、問題は起きていない。



<p>EC-CUBE はもともと Postgres用らしく、開発者も Postgres を使っているとのこと。なので、PostgreSQL を使える環境なら、迷わず Postgres にした方がよさそう。MySQL でも何となく動いてはいたけど、配送時間の登録ごときでシステムエラーになってしまうようでは、先が思いやられる。フォーラムの書き込みなどを見ると、速度も Postgres を使う方が速いらしい。</p>

<p>ちなみに、配送時間の登録で出たエラーはこれ。(data/logs/site.log)</p>

<pre class="prettyprint">INSERT INTO dtb_delivtime(deliv_time,deliv_id,time_id) VALUES (‘18:00 ~ 0:00’,’3’,15) [nativecode=1062 ** Duplicate entry ‘15’ for key 1]
</pre>

<p>dtb_delivtime とはどんなテーブルだろう?</p>

<pre class="prettyprint">mysql> desc dtb_delivtime;
+————+———+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————+———+——+—–+———+—————-+
| deliv_id | int(11) | NO | | | |
| time_id | int(11) | NO | PRI | NULL | auto_increment |
| deliv_time | text | NO | | | |
+————+———+——+—–+———+—————-+
3 rows in set (0.00 sec)
</pre>

<p>time_id は primary key だ。なぜ主キーが重複する。。。</p>

<p>この問題を解決しようと努力するよりも、Postgres に移行した方が賢い選択だと考えて、MySQL で動かすのはあきらめた。レンタルサーバだと MySQL しか用意されていなくて、PostgreSQL を選べないことも多いので、ちょっと不便かも。</p>