【问题标题】:Postgres plpgsql error when trying to create function尝试创建函数时出现 Postgres plpgsql 错误
【发布时间】:2020-04-02 21:17:42
【问题描述】:

Postgres 9.5.2

获取:

ERROR:  syntax error at end of input
LINE 14: ...ast_modified_at, NEW.first_name, NEW.last_name);

对于 psql shell 中的这些语句,在运行 $$; 之后:

CREATE OR REPLACE FUNCTION customer_history_trigger() RETURNS trigger
    LANGUAGE plpgsql SECURITY DEFINER
    AS $$
BEGIN
    NEW.last_modified_at = now();
    IF (TG_OP = 'UPDATE') THEN
        IF OLD.status IS DISTINCT FROM NEW.status or OLD.parent_id IS DISTINCT FROM NEW.parent_id
        or OLD.first_name IS DISTINCT FROM NEW.first_name or OLD.last_name IS DISTINCT FROM NEW.last_name
        or OLD.company IS DISTINCT FROM NEW.company or OLD.company_alias IS DISTINCT FROM NEW.company_alias
        THEN
            INSERT INTO customerhistory
                (customer_id, modified_at, first_name, last_name)
            VALUES
                (NEW.id, NEW.last_modified_at, NEW.first_name, NEW.last_name);
        END IF;
    ELSIF (TG_OP = 'INSERT') THEN
        INSERT INTO customerhistory
            (customer_id, modified_at, first_name, last_name)
        VALUES
            (NEW.id, NEW.last_modified_at, NEW.first_name, NEW.last_name);
    END IF;
    RETURN NEW;
END;
$$;

错误中还有一个小箭头指向行尾的分号。很明显,它不喜欢这一行末尾的分号:(NEW.id, NEW.last_modified_at, NEW.first_name, NEW.last_name);,但我不知道为什么。

【问题讨论】:

    标签: postgresql plpgsql psql postgresql-9.5


    【解决方案1】:

    原来这是与INSERT INTO customerhistoryVALUES 之后的换行符有关的问题。如果我删除这两个换行符,而另外两个则进一步向下,然后将语句粘贴到 psql 中,它可以工作。但是,它不适用于这些换行符。

    如果我在同一行打开括号,也许它也可以工作?没测试过。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      相关资源
      最近更新 更多