通过postgres触发器向最终用户显示警告而不中止事务

时间:2013-01-11 09:42:53

标签: postgresql

我正试图通过 postgres触发器 验证一个字段。

如果目标字段的值为小数,我需要通过警告,但允许用户保存记录。

我尝试了选项

RAISE EXCEPTION,RAISE - USING 

但它在UI上抛出错误并且交易中止。

我尝试了选项

RAISE NOTICE,RAISE WARNING 

警告未显示,只记录了记录。

如果有人帮忙的话会很棒。

先谢谢

1 个答案:

答案 0 :(得分:2)

您需要将client_min_messages设置为显示NOTICEWARNING的级别。你可以这样做:

  • SET LOCAL
  • 的交易级别
  • 在会话级别SET
  • ALTER USER
  • 的用户级别
  • 在数据库级别ALTER DATABASE
  • 全球参与postgresql.conf

然后,您必须在运行查询后检查来自服务器的消息,并将其显示给用户或以其他方式处理它们。如何执行此操作取决于您正在使用的数据库驱动程序,您尚未指定。 PgJDBC? LIBPQ?其他

请注意,发出通知或警告会导致事务暂停并等待用户输入。你真的不想那样做。取而代之的是RAISEEXCEPTION中止交易。告诉用户该问题,如果他们批准了该事务,则重新运行该事务,可能设置了一个标志,指示不应再次引发异常。

技术上可以让PL / Perlu,PL / Pythonu或PL / Java触发器暂停执行,同时通过侧通道(如TCP套接字)要求客户端批准操作。不过,这是一个非常糟糕的主意。