2016-11-09 110 views
0

我有一張表,名爲base,我需要在插入記錄後進行更新。我寫了一個函數。使用postgres函數更新表列

CREATE OR REPLACE FUNCTION host_ip() RETURNS trigger AS $host_ip$ 
BEGIN 

    update base set thumbnail_url = 
    replace ("thumbnail_url",'localhost','myipadd') WHERE id = NEW.id; 
    RETURN NEW; 
END; 
$host_ip$ LANGUAGE plpgsql; 

該函數在插入記錄時給我錯誤。我有一個插入後調用函數的觸發器。該錯誤是PL/pgSQL function host_ip() line 4 at SQL statement SQL statement

觸發是:

CREATE TRIGGER host_ip AFTER INSERT OR UPDATE ON base 
FOR EACH ROW EXECUTE PROCEDURE host_ip(); 
+0

我已經添加了扳機 –

回答

1

要更改剛插入或更新行的列,你只需要分配值。沒有必要運行一個update

CREATE OR REPLACE FUNCTION host_ip() RETURNS trigger 
AS 
$host_ip$ 
BEGIN 
    new.thumbnail_url := replace(thumbnail_url,'localhost','myipadd'); 
    RETURN NEW; 
END; 
$host_ip$ 
LANGUAGE plpgsql; 

但你不能改變AFTER觸發器的價值,你需要這樣的BEFORE觸發:

CREATE TRIGGER host_ip 
    BEFORE INSERT OR UPDATE ON base 
FOR EACH ROW EXECUTE PROCEDURE host_ip();