使用 PostgreSQL 9.3 我一直在尝试定义一个assert
辅助函数来检查空查询结果和类似的事情,如下所示:
CREATE FUNCTION public.assert (
in_assertion boolean,
in_errormessage text
)
RETURNS boolean
IMMUTABLE
LANGUAGE plpgsql
SECURITY INVOKER
AS $function$
BEGIN
IF NOT in_assertion THEN
RAISE EXCEPTION 'assertion failed: %', in_errormessage;
END IF;
RETURN in_assertion;
END;
$function$
;
Run Code Online (Sandbox Code Playgroud)
经过测试,我发现异常没有像我期望的那样抛出。例如,对于CREATE TABLE emptytable (somecolumn text);
和
CREATE FUNCTION public.testassert_buggy (
out somevalue text
)
LANGUAGE sql
SECURITY DEFINER
AS $function$
WITH firstquery AS (
SELECT * FROM emptytable
), nonemptycheck AS (
SELECT assert(count(*) = 42, 'nonemptycheck …
Run Code Online (Sandbox Code Playgroud)