Вычислить значение столбца во время INSERT - PullRequest
4 голосов
/ 20 мая 2011

Я использую Postgresql 8.3

У меня есть таблица базы данных, включающая buy_value и sell_value .Я хочу добавить функцию DEFAULT, чтобы при каждой вставке база данных вычисляла прибыль в соответствии со значениями покупки и продажи и вставляла ее в соответствующий столбец ...

Как следуетопределить мой альтер?

Ответы [ 3 ]

5 голосов
/ 20 мая 2011

это не так просто, как изменить значение DEFAULT ... вам потребуется триггер перед вставкой.(но не рекомендуется хранить вычисленные поля в таблице, потому что вы рискуете нарушить целостность данных)

проверить это

http://www.postgresql.org/docs/9.1/static/triggers.html

Удачи

4 голосов
/ 20 мая 2011

Не могу придумать вескую причину для хранения такого вычисляемого столбца в postgres.

С точки зрения скорости записи и чтения - дополнительный ввод / вывод приведет к снижению производительности, которое вряд ли можно оправдать (возможно, в большинстве систем с привязкой к ЦП, но даже в этом случае для такой тривиальной операции это не имеет смысла).

Обычно для создания индекса необходимо хранить вычисленные столбцы, однако postgres имеет функциональных индексов , поэтому вы можете создать индекс без материализованного столбца, а для остальных целей использовать представление.

2 голосов
/ 21 мая 2011
drop table foo2 cascade;
create table foo2 (val int, valplus int);
create or replace function fooplusonetrig()
returns trigger as $$
declare
  rec record;
begin
  raise notice 'here with % %',new.val,new.valplus;
  new.valplus := new.val + 1;
  return new;
end; $$ language 'plpgsql';
create trigger fooplusonetrig before insert ON foo2 for each row execute procedure fooplusonetrig();
insert into foo2 values (2,1);
select * from foo2;
 val | valplus 
-----+---------
   2 |       3
...