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側でうまくいかないようです。






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