У меня есть триггер на PostgreSQL 9, например:
CREATE OR REPLACE FUNCTION clients_update_billingdata_trigger()
RETURNS trigger AS
$BODY$
DECLARE
columnsUpdate TEXT;
BEGIN
columnsUpdate := '';
IF (NEW.rsocial IS DISTINCT FROM OLD.rsocial) THEN
columnsUpdate := columnsUpdate || 'RSocial before: ' || OLD.rsocial || '. RSocial after: ' || NEW.rsocial || E'\n';
END IF;
IF (NEW.legalidentifier IS DISTINCT FROM OLD.legalidentifier) THEN
columnsUpdate := columnsUpdate || 'ILegal before: ' || OLD.legalidentifier || '. ILegal after: ' || NEW.legalidentifier || E'\n';
END IF;
[...]
IF (columnsUpdate != '') THEN
SELECT dblink_exec ('dbname=xxx user=xxx password=xxxxx',
'INSERT INTO BillingDataUpdate (client_id, columnsupdate)
VALUES (''' || NEW.idclient || ''', ''' || columnsUpdate || ''');');
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
Значения NEW.rsocial
могут быть, например: Служба Томми . Если я выключу триггер, запись будет сохранена правильно (в таблице other
в разделе Клиенты), потому что я экранирую строку в PHP с помощью функции pg_escape_string
. Вопрос в том, как убежать NEW.rsocial
, чтобы запустить триггер?
Заранее спасибо.