我的代码很简单:
eval {
my $item = $_table1_class->new(
field1 => $val1,
field2 => $val2,
field3 => $val3,
);
$item->save;
};
if ($@) {
.
.
.
# Error handling stuff.
.
.
.
}
代码运行时,我收到错误消息“错误:“id”列中的空值违反非空约束”。错误消息还表明错误所在的行是“$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。但是,它似乎没有这样做。我使用这种直接的方式来更新与此特定表完全相同的其他表(已进行必要修改),并且它适用于这些其他表。但是,在这里它根本不起作用。
有人对此有任何想法吗?在网上看,我看到其他人似乎遇到了相关的问题,但我在网上其他地方的帖子中找不到任何补救措施。
有人吗?