CodeIgniter入門をPostgreSQLでやってみる

IBMdeveloperWorks Japanサイトの記事「CodeIgniter入門」 を、PostgreSQLでやってみた。CodeIgniterではpostgresqlのDBドライバの名前が "postgre" なのにちょっとがっくり、勝手に決め打ちしたら間違えてた。
PostgreSQLを使う場合は、テーブルを作成するときのSQL文がちょっと違ってくる。

`(バッククォート)のかわりに、カラム名を囲むみは "(ダブルクォート)を使い、値の文字列を囲むには '(シングルクォート)を使う。

また、postgresqlは自動増分の SERIAL 型があるので、< `id` int(11) NOT NULL auto_increment,
は、
> id SERIAL NOT NULL,

となる。

さらに、更新時のルールは、属性としては付けられず、別に付けるため、< `stamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
は、
> stamp timestamp NOT NULL default CURRENT_TIMESTAMP
としておいて、別のクエリにて、

CREATE LANGUAGE 'plpgsql';
CREATE FUNCTION update_stamp() RETURNS TRIGGER AS $$begin new.stamp := now(); return new; end;$$ LANGUAGE plpgsql;
CREATE TRIGGER tg_update BEFORE UPDATE ON contacts FOR EACH ROW EXECUTE PROCEDURE update_stamp();

を実行してトリガーを定義する。


なお、次のように、
CREATE RULE contacts_on_update AS ON UPDATE TO contacts DO UPDATE contacts SET stamp = CURRENT_TIMESTAMP;
RULEを定義して使うと、
ERROR: infinite recursion detected in rules for relation "contacts"
と言われて、失敗する。

参照: http://archives.postgresql.org/pgsql-novice/2006-01/msg00245.php