Postgres plpg sql ошибка при попытке создать функцию - PullRequest
0 голосов
/ 03 апреля 2020

Postgres 9.5.2

Получение:

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

для этих операторов в оболочке psql сразу после запуска $$;:

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);, но я не могу понять, почему.

1 Ответ

0 голосов
/ 03 апреля 2020

Оказывается, это проблема, связанная с разрывами строк после INSERT INTO customerhistory и VALUES. Если я удаляю эти два переноса строк, а два других - дальше, затем вставляю оператор в psql, он работает. Однако это не работает с этими переносами строк.

Возможно, это также будет работать, если я открою скобки в той же строке? Не проверял это.

...