проблемы последовательности postgresql с lastinsertid и zend framework - PullRequest
2 голосов
/ 28 марта 2009

Я только начал работать над проектом, и я использую Zend Framework и Postgresql (обычно использую MySQL), однако у меня возникает проблема при попытке получить последний вставленный идентификатор при использовании команды вставки Zend_Db.

При использовании функции $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 (я думаю, что, скорее всего) или в фреймворке.

У кого-нибудь еще была подобная проблема с этим?

Ответы [ 4 ]

3 голосов
/ 30 марта 2009

Я вижу, вы нашли свой ответ, это была просто опечатка.

FWIW, я предложу следующее предложение в качестве еще одной причины ошибки, которую вы видели:

Вам необходимо записать имя последовательности точно в том виде, в котором она хранится, включая соответствующий регистр, если имя последовательности хранится как что-либо, кроме строчных.

Другими словами, если последовательность была создана с надписью "Users_userid_seq", но вы запросили ее как "users_userid_seq", это не соответствует, и вы получите ошибку.

Попробуйте перечислить последовательности в инструменте psql:

postgres=# \ds

Это покажет вам определенные последовательности, с их написанием, как они хранятся в базе данных.

1 голос
/ 28 марта 2009

Проверьте, находится ли схема таблицы «users» в «search_path» сеанса Zend_Db.

0 голосов
/ 19 мая 2011

У меня работает следующий код (PostgreSQL & Zf):

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

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

Замените $this->_sequence последовательностью, которую вы используете в базе данных.

0 голосов
/ 28 марта 2009

Поле «ИД пользователя» является первичным ключом в таблице «пользователи»? Если это не так, измените тип идентификатора пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...