@Vetka_in_code

Как автоматически при добавлении новой строки изменить колонку total?

Написал триггер, но что-то не работает:
CREATE OR REPLACE FUNCTION autocuontfunc() RETURNS TRIGGER AS $big_bank$
   BEGIN
      INSERT INTO big_bank(total) VALUES (NEW.total  = percent * score);
      RETURN NEW;
   END;
$big_bank$ LANGUAGE plpgsql;

CREATE TRIGGER auto_cuont BEFORE DELETE ON big_bank FOR EACH ROW EXECUTE PROCEDURE autocuontfunc();

Вот структура таблицы:
CREATE TABLE big_bank(
    id SERIAL NOT NULL PRIMARY KEY,
    fio TEXT NOT NULL,
    percent numeric DEFAULT 0,
    score NUMERIC DEFAULT 0,
    total NUMERIC DEFAULT 0
);

При попытке добавить нового пользователя или клиента "банка" должна автоматически посчитаться(по моему замыслу) колонка total, но там все равно висит 0. В чем ошибка?
  • Вопрос задан
  • 33 просмотра
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
при добавлении новой строки

BEFORE DELETE

Не находите ничего странного?

Впрочем мой хрустальный шар показывает, что вам нужен вовсе
CREATE TABLE big_bank(
    id SERIAL NOT NULL PRIMARY KEY,
    fio TEXT NOT NULL,
    percent numeric DEFAULT 0,
    score NUMERIC DEFAULT 0,
    total NUMERIC GENERATED ALWAYS AS (percent * score) STORED
);


Ну или до postgresql 12 эмулировать да, триггером, но вот так:
CREATE OR REPLACE FUNCTION autocuontfunc() RETURNS TRIGGER AS $big_bank$
   BEGIN
      NEW.total = NEW.percent * NEW.score;
      RETURN NEW;
   END;
$big_bank$ LANGUAGE plpgsql;

CREATE TRIGGER auto_cuont BEFORE INSERT OR UPDATE ON big_bank FOR EACH ROW EXECUTE PROCEDURE autocuontfunc();
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы