Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl DBIx::使用函数更新充气列_Perl_Postgresql_Dbix Class - Fatal编程技术网

Perl DBIx::使用函数更新充气列

Perl DBIx::使用函数更新充气列,perl,postgresql,dbix-class,Perl,Postgresql,Dbix Class,我试图通过update\u或\u new函数模拟此SQL UPDATE user SET lastseen = GREATEST( lastseen, ?::timestamp ) WHERE userid = ? 它在充气列上给出一个错误,表示它无法在undef上调用is_∞ $schema->resultset('user')->update_or_new( { userid => 'peter', lastseen => \[ 'GREATEST(

我试图通过
update\u或\u new
函数模拟此SQL

UPDATE user SET lastseen = GREATEST( lastseen, ?::timestamp ) WHERE userid = ?
它在充气列上给出一个错误,表示它无法在
undef
上调用
is_∞

$schema->resultset('user')->update_or_new( {
    userid => 'peter',
    lastseen => \[ 'GREATEST( lastseen, ?::timestamp )', DateTime->from_epoch(epoch => 1234) ]
} );

我猜这是因为
InflateColumn::DataTime
不希望在那里有函数。对于这个问题,有没有干净的解决方法?

这是DBIx::Class(此处提到:)中的一个bug,修复程序被合并了。在下一个版本中应该可以。
也就是说,如果您使用的是DBIx::类,请转储SQL。设置环境变量DBIX_TRACE=1以查看其发送内容的跟踪。在尝试执行sql之前,它在放气/充气时死亡。它的DBIC_TRACE=1,但无论如何,DateTime->from_epoch(1234)是不正确的。如果您想使用那个相当奇怪的历元,您需要DateTime->from_epoch(历元=>1234)<代码>$perl-MDateTime-E'say DateTime->from_epoch(1234)'DateTime::from_epoch调用中的奇数个参数,当需要命名参数时[…]DateTime::from_epoch(undf,1234)在-e第1行调用,这就是为什么充气不起作用的原因,因为您在日期时间失败,所以您正在传递undefconstructor@mikew这是一个问题的输入错误。我已经编辑并更正了它。
my $dtf = $schema->storage->datetime_parser;    #https://metacpan.org/pod/DBIx::Class::Storage::DBI#datetime_parser
my $user_rs = $schema->resultset('User')->search({ userid => 'peter' });
my $dt = DateTime->from_epoch(epoch => 1234);


#select count(*) where userid = 'peter';

if( $user_rs->count ) {
  $user_rs->update(
    lastseen => \[ 'GREATEST( lastseen, ? )',  $dtf->format_datetime($dt) ]
  );
} else {
  $user_rs->create({ lastseen => $dt });
}