2016-11-09 16 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; 

この機能を使用すると、レコードを挿入するときにエラーが発生します。私は挿入後に関数を呼び出すトリガを持っています。

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

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トリガーを必要とします –

答えて

1

だけで挿入または更新された行の列を変更するには、あなただけの割り当てに値を必要とする:エラーはトリガーがあるPL/pgSQL function host_ip() line 4 at SQL statement SQL statement

です。 updateを実行する必要はありません。私は、トリガーを追加した

CREATE TRIGGER host_ip 
    BEFORE INSERT OR UPDATE ON base 
FOR EACH ROW EXECUTE PROCEDURE host_ip();
関連する問題