Помогите создать триггер PostgreSql, который при добавлении будет выбирать записи с датой, считать их количество и запишет в поле количество + 1

Пробую создать триггер PostgreSql, который при добавлении записи в таблицу "public"."OrderItem", будет выбирать все записи с датой "public"."OrderItem"."date", считать их количество и запишет в поле "public"."OrderItem"."sequence" полученное количество + 1

Такая конструкция вызывает ошибку "syntax error at or near \"SELECT\"",

CREATE TRIGGER order_item_next 
    BEFORE INSERT ON "public"."OrderItem"
    SELECT COUNT(*) + 1 INTO NEW.sequence
     FROM
        (
        SELECT
        FROM
          (
            SELECT
              *
            FROM
              "public"."OrderItem"
            WHERE
              (
                ("public"."OrderItem"."date") = ((now()) :: date)
              )
          ) AS "_0_root.base"
      ) AS "_1_root"
    ;

Ответы (1 шт):

Автор решения: Rishat Haydarshin

Триггерные функции в PostgreSQL:

create or replace function order_item_next_fn() returns trigger
    language plpgsql
as $$
BEGIN
    SELECT COUNT(item.*) + 1
    FROM "public"."OrderItem" item
    WHERE date_part('day', item.date) = date_part('day', now())
    INTO NEW.sequence;

    RETURN NEW;
END
$$;

CREATE TRIGGER order_item_next_trigger
    BEFORE INSERT
    ON "public"."OrderItem"
    FOR EACH ROW
EXECUTE PROCEDURE order_item_next_fn();
→ Ссылка