从PostgreSQL函数中获取异常信息

3

我有一个触发器函数在插入表时运行,在某些情况下会引发异常。

我维护一个运行在 Catalyst 上的旧 Perl 应用程序,它创建一个事务并在表上插入行。

当触发器函数引发异常时,我希望能够仅打印出我抛出的错误消息,而不是任何调试信息(数据库操作、上下文、Perl 文件等)。

例如,如果我的函数抛出类似以下内容的东西:

raise exception 'Item with id % cannot be shipped at this time.', new.id;

我只想看到带有id为13的商品无法在此时发货。
而不是
DBIx :: Class :: Row :: insert():DBI异常:DBD :: Pg :: st执行失败:错误:id为13的商品目前无法发货。[用于语句“INSERT INTO ... at /home/../lib/Class/Controller/Inv.pm line 260]
当前Perl代码大致如下:
$c->model('Class')->schema->txn_do(sub {
    ...
    eval {
        $shipment->insert;
        1;
    } or do {
        $error = $@;
        last;
    };

    if ($error) {
        $c->stash->{error} = $error;
    }
);

谢谢你。

感谢您。

2个回答

4
也许可以进行此替换:
my $error = $@;
$error =~ s/^.*ERROR: (.*) \[for Statement.*$/$1/;

是的。我的意思是我考虑使用正则表达式。我想可能有一种更...我猜是更“合适”的方法来做这件事。 - rhyek

1
您可以访问数据库句柄的errstr()方法,这也是传递给warn/die的内容。
 warn $c->model('Class')->schema->storage->dbh->errstr();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接