ECWorks Blog

ECWorks Blog

CakePHPを中心としたサイト開発情報をメインに公開。新しもの好きなので時々製品レポートなんかも。

PostgreSQLでMySQLの「auto increment」に対抗する方法

PostgreSQL使いがCakePHPでいろいろなサンプルを試していて、乗り越えなければいけない壁がいくつかあります。前述の記事で、bdo_source.phpの不具合を挙げましたが、それを解決したとしても、MySQLとの仕様の違いを克服する必要が多分にあります。

初っぱなでまず解決しなければならないのが「auto increment」です。CakePHPでは、idカラムを作りそれを主キーとして利用するのが一般的ですが、MySQLのようなauto incrementのオプションがありません。同機能を実現するには、若干工夫しなければなりません。

基本的にPostgreSQLでは、idに関しては次のようにテーブルを定義します。

DROP TABLE IF EXISTS users;
DROP SEQUENCE IF EXISTS users_id_seq;
CREATE SEQUENCE users_id_seq;
CREATE TABLE users (
  id    INTEGER  DEFAULT nextval('users_id_seq') PRIMARY KEY,
  created    TIMESTAMP NOT NULL,
  modified    TIMESTAMP NOT NULL, 
 
  name    VARCHAR(255) NOT NULL
);

ちなみにシーケンス名は、テーブル名と同じく複数形でないと、CakePHP側でうまくいかないようです。




このエントリをはてなブックマークに追加 このエントリをLivedoor Clipに追加 このエントリをYahoo!ブックマークに追加 このエントリをdel.icio.usに追加 このエントリをFC2ブックマークに追加 このエントリをNifty Clipに追加 このエントリをPOOKMARK. Airlinesに追加 このエントリをBuzzurl(バザール)に追加 このエントリをChoixに追加 このエントリをnewsingに追加 

2 Comments

  1. serialじゃだめ?

  2. serialでも同様です。
    この解説は、serial型が展開する内容を明示的にしたものですので、理解されているのなら問題ありません。

Leave a Response

*

コメントは承認待ちです。表示されるまでしばらく時間がかかるかもしれません。