相关疑难解决方法(0)

PostgreSQL 似乎忽略了 CTE 中的 RAISE EXCEPTION

使用 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)

postgresql cte

5
推荐指数
1
解决办法
1622
查看次数

什么时候使用存储过程/用户定义函数?

我对 SP(存储过程)和 UDF(用户定义函数)的使用感到困惑。通常,也可以在数据库之外的程序中编写代码。

是否有任何一般建议来决定何时使用它们?

postgresql stored-procedures functions

4
推荐指数
1
解决办法
9419
查看次数

标签 统计

postgresql ×2

cte ×1

functions ×1

stored-procedures ×1