PostgreSQL + PDO で lastInsertId
PDOでPostgreSQLを叩くとき、lastInsertIdを取得するにはシーケンスオブジェクト名を投げる必要があるそうな。
CREATE TABLE test ( id SERIAL PRIMARY KEY, name VARCHAR(255) );
てな感じでテーブル定義して、ここにINSERTした後でlastInsertIdを取得するには、
$lastId = $this->dbh->lastInsertId('test_id_seq');
とかやって、シーケンス名を引数として与えないと取れません。MySQLの場合は引数なしで取れるので、処理を振り分ける必要があります。プログラム自体はMySQLと互換性を持たせて…とか思うとちょっと厄介ですね。プライマリキーをidに固定して、INSERT時にテーブル名を覚えておく、とかそんな方法で回避するのが手っ取り早いかな?
あと、
$this->dbh->prepare('INSERT INTO test (name) VALUES ("テスト")');
はMySQLだと通るけど、PostgreSQLだと通らないとか。
$this->dbh->prepare("INSERT INTO test (name) VALUES ('テスト')");
だったら両方通るから、SQLを書く時はこっちの書式に統一しておかないと。