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


“PostgreSQLでMySQLの「auto increment」に対抗する方法” への2件の返信

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

コメントは受け付けていません。