Postgres在文件执行结束时引发所有异常

时间:2020-03-12 19:15:16

标签: sql postgresql exception plpgsql

DO $$
BEGIN
  -- Check to make sure that event starts after users created
  IF EXISTS (
    SELECT users.id
    FROM event
    INNER JOIN users ON event.user_id::INT = users.id
    WHERE event.start > users.created
  )
  THEN
    RAISE NOTICE 'SUCCESSFUL %', now();
  ELSE
    RAISE EXCEPTION 'ERROR on % - All Event start timestamps must be created after users are created',now();
  END IF;

END $$;

此异常是为了检查时间戳,并且效果很好。但我想添加一个类似的条件,并至少添加3个例外条件。我现在想在末尾返回异常。我不希望进程在第一次检查失败时停止。我希望最后一次全部提出所有失败的测试。我怎么做 ?我了解了有关堆叠式诊断的信息,但不知道这种方法是否正确,或者是否应该使用IF-else?

1 个答案:

答案 0 :(得分:1)

中断处理具有异常的性质,因此您不能简单地为此使用异常。

您可以将所有异常收集在一个(临时的)表中,最后将它们传达给客户端,或者将它们连接为一个大的异常。

您还可以将各个消息作为NOTICE发出并在末尾引发异常。