2013-08-20 66 views
0

以下函數update_sessioninfo()應該只更新更改的列。 。新的*列正在更新一些不正確的值運行後:更新後的postgresql觸發器

update freeradius.radacct set acctsessiontime=25 where radacctid=3; 

功能

CREATE OR REPLACE FUNCTION update_sessioninfo() RETURNS trigger AS $radacct_update$ 
BEGIN 
    -- update the updated records 

     update freeradius.day_guiding_usage set acctstoptime=New.acctstoptime,acctsessiontime=New.acctsessiontime,connectinfo_start=New.connectinfo_start,connectinfo_stop=New.connectinfo_stop,acctinputoctets=New.acctinputoctets,acctoutputoctets=New.acctoutputoctets,acctterminatecause=New.acctterminatecause where acctsessionid=Old.acctsessionid; 

RETURN NULL; 
END; 
$radacct_update$ LANGUAGE plpgsql; 

觸發低於

CREATE TRIGGER radacct_update AFTER UPDATE ON freeradius.radacct 
FOR EACH ROW 
WHEN (OLD.* IS DISTINCT FROM NEW.*) 
EXECUTE procedure update_sessioninfo(); 
+1

_The新*列正在更新一些不正確values_:函數不嘗試修改'新*',它無論如何也因爲它是一個AFTER UPDATE。觸發器(更改值太遲)。本身這個函數看起來很好,所以不清楚預期是什麼,取而代之的是什麼。 –

回答