私のコードは簡単です:
eval {
my $item = $_table1_class->new(
field1 => $val1,
field2 => $val2,
field3 => $val3,
);
$item->save;
};
if ($@) {
.
.
.
# Error handling stuff.
.
.
.
}
コードを実行すると、「エラー: 列 "id" の null 値が null 以外の制約に違反しています」というエラー メッセージが表示されます。エラー メッセージは、エラーが含まれている行が "$item->save;" であることも示しています。ライン。
書き込もうとしている PostgreSQL データベース テーブルには、field1、field2、および field3 に加えて id フィールドがあります。id フィールドは次のように定義されます。
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 にシーケンスから ID を作成させる必要があることは明らかです。しかし、これはしていないようです。この特定のテーブルとまったく同じように他のテーブルを更新するこの簡単な方法を使用し (必要な変更を加えて)、これらの他のテーブルに対して正常に機能します。しかし、ここでは単に機能していません。
これについて何か考えがある人はいますか?ネットを見ると、他の人が関連する問題を抱えているように見えますが、ネット上の他の投稿では解決策を見つけることができません.
誰か?