У меня есть триггер PostgreSQL 9, как это:Бегство переменной PL/PgSQL
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
для запуска триггера?
Заранее спасибо.
Thanks @ A.H. но я проверял эти функции перед тем, как спросить, но «не работает» – doctore
@doctore: Можете ли вы уточнить: что _exactly_ вы пытались и что было ошибкой? Код и примеры помогут больше всего. –
@doctore: "* do not work *" не является допустимым сообщением об ошибке Postgres. –