Мой код прост:Rose :: DB, кажется, не признает последовательность Postgres
eval {
my $item = $_table1_class->new(
field1 => $val1,
field2 => $val2,
field3 => $val3,
);
$item->save;
};
if ([email protected]) {
.
.
.
# Error handling stuff.
.
.
.
}
При выполнении кода, я получаю сообщение об ошибке «ОШИБКА: пустое значение в столбце„ид“нарушает не -некольное ограничение ". Сообщение об ошибке также указывает, что строка, в которой находится ошибка, является «$ item-> save;» линия.
В таблице базы данных PostgreSQL, которую я пытаюсь записать, есть поле id в дополнение к field1, field2 и field3. Поле идентификатора определяется как:
id | integer | not null default | nextval('table1_id_seq'::regclass)
Это находит свое отражение в коде класса, который я определяю для Rose :: DB для этой таблицы. Для поля id для этой таблицы у меня есть код:
id => {
type => 'serial',
not_null => 1,
primary_key => 1,
sequence => 'table1_id_seq',
},
Что может быть в этом мире?
Странно, что все это работало сегодня утром. Я изменил материал, который не должен влиять на это, и он просто перестает работать. Я весь день вытаскиваю волосы. Мне кажется довольно понятным, что Rose :: DB должен получать PostgreSQL для создания идентификатора из последовательности. Но, похоже, это не так. Я использую этот простой способ обновления других таблиц точно так же, как эта конкретная таблица (mutatis mutandis), и она отлично подходит для этих других таблиц. Но здесь он просто не работает.
Есть ли у кого-нибудь идеи об этом? Глядя на сеть, я вижу, что у других были проблемы, которые, как представляется, связаны друг с другом, но я не могу найти никаких исправлений в других местах в сети.
Кто-нибудь?
Проверьте, какие значения генерирует последовательность ('select * from sequence_name' подходит для этого, просто никогда не используйте полученную информацию для чего-либо важного, только для отладки) и сравнивайте их с максимальным значением, которое в настоящее время находится в таблице. Разворачивает ли ваша структура последовательность в соответствии с текущим максимальным значением в таблице? –
Привет Крейг. Спасибо, что ответили. «Last_value» равно 2, а «max_value» - 9223372036854775807. Помогает ли это? –
Не без текущего максимального значения в таблице, нет. 'SELECT max (id) FROM any_table_is_the_problem'. –