2009-03-27 12 views
2

私はちょうどプロジェクトの作業を開始しましたが、zendフレームワークとpostgresql(通常はMySQLを使用しています)を使用していますが、使用時に最後に挿入されたIDを取得しようとしているときZend_Db insertコマンドlastinsertidとzendフレームワークのpostgresqlシーケンスの問題

機能$db->lastinsertid('users', 'userid');を使用しているとき、私は次のようなエラーメッセージが出ます:

SQLSTATE[42P01]: Undefined table: 7 ERROR: relation "users_userid_seq" does not exist LINE 1: SELECT CURRVAL('users_userid_seq')^

を、私は、データベースをチェックしましたし、シーケンスが存在しない、テーブルと列の両方が同じユーザによって所有されていますアプリケーションにアクセスするために使用されています。

私も$db->lastSequenceId('users_userid_seq');を試しましたが、同じエラーメッセージが表示されます。

問題がpostgresql(私はおそらくそう思います)またはフレームワークであるかどうかはわかりません。

他に誰もこれに似た問題がありましたか?

答えて

3

私はあなたの答えを見つけたと思っています。それは単なる誤植でした。シーケンス名が格納されている場合は、それが一致する場合を含め、保存されているとおりにシーケンスの名前のスペルする必要が

FWIW、私はあなたが見たエラーのために別の理由として、以下の提案を提供します小文字以外のものとして。

つまり、シーケンスがスペル "Users_userid_seq"で作成されたが、 "users_userid_seq"と照会した場合、これは一致しないため、エラーが発生します。 psqlツールでシーケンスをリスト

試してみてください。彼らはデータベースに格納されているよう

postgres=# \ds 

これはあなたに彼らのスペルで定義されたシーケンスを、表示されます。

0

"userid"フィールドは、 "users"テーブルの主キーですか? そうでない場合は、ユーザーIDのタイプを変更してください。

+0

睡眠の後、私のテーブルにタイプがありますが、それはユーザーIDではないユーザーIDです...見た目には見えませんでした... –

1

テーブル「users」のスキーマがZend_Dbセッションの「search_path」にあるかどうかを確認してください。

0

次のコードは、私の作品(PostgreSQLの& ZF):

$db->insert($this->getTableName(), $data); 

$id = $db->lastSequenceId($this->_sequence); 

は、データベースで使用されている順序で$this->_sequenceを交換してください。

関連する問題