postgresql 函数创建给出语法错误

postgresql function creation gives syntax error

我正在编写一个 postgresql 函数,但我似乎无法找到错误所在。 Postgresql 的版本是 9.4。
以下是函数:

CREATE FUNCTION custom_function1()
RETURNS trigger
LANGUAGE plpgsql
AS
$$
    DECLARE base_val integer;
    BEGIN
        base_val := (EXTRACT(YEAR FROM now())::integer * 10000000000);

        IF (currval('custom_sequence') < base_val) THEN
            setval('custom_sequence', base_val);
        END IF;

        NEW.id := custom_function2();
        RETURN NEW;
    END;
$$;

我的 custom_sequence 格式为 YYYY0000000000(例如 20150000000000)。

所以这基本上(应该做的)是检查 base_val(当前年份的最小值)是否大于 currval(当前 custom_sequence 值)并更新 custom_sequence 值。然后它 returns 使用函数 custom_function2 生成的序列的新值(略微格式化)。

当我尝试执行它时,它给我:
"setval"
处或附近的语法错误 我对 postgresql 和编写函数都很陌生,所以我可能看不到明显的错误。如果有人能帮助我,将不胜感激,谢谢。

该错误与文档中的解释有关here:

40.5.2 Executing a Command With No Result
[...]

Sometimes it is useful to evaluate an expression or SELECT query but discard the result, for example when calling a function that has side-effects but no useful result value. To do this in PL/pgSQL, use the PERFORM statement:

PERFORM query;

你应该写:

PERFORM setval('custom_sequence', base_val);