gpt4 book ai didi

postgresql - Rose::DB 似乎无法识别 Postgres 序列

转载 作者:行者123 更新时间:2023-11-29 13:34:28 25 4
gpt4 key购买 nike

我的代码很简单:

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)

这反射(reflect)在我为该表的 Rose::DB 定义的类的代码中。对于此表的 id 字段,我有代码:

id => { 
type => 'serial',
not_null => 1,
primary_key => 1,
sequence => 'table1_id_seq',
},

这里到底有什么问题?

奇怪的是今天早上一切正常。我改变了根本不应该影响这个的东西,它刚刚停止工作。我整天都在拔头发。我似乎很清楚 Rose::DB 应该让 PostgreSQL 从序列中创建 id。但是,它似乎没有这样做。我使用这种直接更新其他表的方法与此特定表完全相同 (mutatis mutandis),它适用于这些其他表。但是,在这里它根本不起作用。

有没有人对此有任何想法?在网上看,其他人也有类似的问题,但我在网上其他地方的帖子中找不到任何解决方法。

有人吗?

最佳答案

我想通了。问题是在我的表类中,一个不同的字段被指定为“id”的主键。代码如下:

primary_key_columns => [ qw( col2 ) ],

(我没有写这段代码。)当我把它改成:

primary_key_columns => [ qw( id ) ],

又成功了。让我困扰的是为什么这首先起作用。它确实有效,然后我在代码的其他地方做的事情似乎唤醒了 Rose::DB,这里出​​了点问题,它停止了工作。

所以,问题不在于 Rose::DB,而在于我们的代码。

关于postgresql - Rose::DB 似乎无法识别 Postgres 序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16503655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com