2016-11-09 105 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();