Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Ошибка в триггере
|
|||
|---|---|---|---|
|
#18+
Возможно проблема очень банальная, но решить ее пока не получается :(. Вопрос вот в чем - есть триггерная функция следующего содержания: CREATE OR REPLACE FUNCTION changes_audit() RETURNS "trigger" AS $BODY$ BEGIN IF (TG_OP = 'DELETE') THEN INSERT INTO _backup_data SELECT OLD.id, TG_RELNAME, 'd', now(); RETURN OLD; ELSIF (TG_OP = 'UPDATE') THEN INSERT INTO _backup_data SELECT NEW.id, TG_RELNAME, 'u', now(); RETURN NEW; ELSIF (TG_OP = 'INSERT') THEN INSERT INTO _backup_data SELECT NEW.id, TG_RELNAME, 'i', now(); RETURN NEW; END IF; RETURN NULL; -- result is ignored since this is an AFTER trigger END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; И есть вот такой триггер на таблицу show_type CREATE TRIGGER show_type_audit_trig BEFORE INSERT OR UPDATE OR DELETE ON show_type FOR EACH ROW EXECUTE PROCEDURE changes_audit(); На тестовом сервере (8.1.4, Windows XP) триггер прекрасно работат, все изменения пишутся в _backup_data. на рабочем сервере (7.3.2, юникс), при попытке выполнить, например, update show_type (id, name) values (999,999); сервер возвращает ошибку ------------- SQL error: ERROR: parse error at or near "IF" In statement: insert into show_type (id,name) values (999,999); ------------- Если отключить триггер, то естественно все операции по вставке или изменению таблицы проходят нормально. Перерыл доки, никакой разницы между между объявлениями триггерных функций в указанных версиях серевров не увидел. Но похоже, гдето она таки есть. Помогите плз, если кто в курсе - буду очень благодарен за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 07:09 |
|
||
|
Ошибка в триггере
|
|||
|---|---|---|---|
|
#18+
попробуй перечислить поля таблицы _backup_data в которые ты хочешь записать данные и забрать ключевое слово SELECT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 10:14 |
|
||
|
Ошибка в триггере
|
|||
|---|---|---|---|
|
#18+
попробовал... содержимое функции стало вот такое. IF TG_OP = 'DELETE' THEN INSERT INTO _backup_data (src_table_id, src_table, "operation", chg_date_time) values (OLD.id, TG_RELNAME, 'd', now()); RETURN OLD; ELSIF TG_OP = 'UPDATE' THEN INSERT INTO _backup_data (src_table_id, src_table, "operation", chg_date_time) values (NEW.id, TG_RELNAME, 'u', now()); RETURN NEW; ELSIF TG_OP = 'INSERT' THEN INSERT INTO _backup_data (src_table_id, src_table, "operation", chg_date_time) values (NEW.id, TG_RELNAME, 'i', now()); RETURN NEW; END IF; RETURN NULL; ошибка не исчезла :(. SQL error: ERROR: parse error at or near "IF" In statement: insert into "show_type" ("id", "name", "logo_img") values (999,'999','999'); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 10:30 |
|
||
|
Ошибка в триггере
|
|||
|---|---|---|---|
|
#18+
Евгений СемионовВозможно проблема очень банальная, но решить ее пока не получается :(. Перерыл доки, никакой разницы между между объявлениями триггерных функций в указанных версиях серевров не увидел. Но похоже, гдето она таки есть. Помогите плз, если кто в курсе - буду очень благодарен за помощь. A vy quotirovanie-to peredelalili s $BODY$ na prostye odinarnye kavychki ? Ved' v PG <8.0 mojno tolko tak quotirovat'. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 10:55 |
|
||
|
Ошибка в триггере
|
|||
|---|---|---|---|
|
#18+
А может у тебя RULE на таблицу show_type стоит?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 17:26 |
|
||
|
Ошибка в триггере
|
|||
|---|---|---|---|
|
#18+
Mike WhiteА может у тебя RULE на таблицу show_type стоит?.. сори.... на таблицу _backup_data ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 17:28 |
|
||
|
Ошибка в триггере
|
|||
|---|---|---|---|
|
#18+
2 Mike White Не, RULE на таблицах у меня нет. Но совет с кавычками помог. вот такое объявление функции решило проблему CREATE OR REPLACE FUNCTION changes_audit() RETURNS "trigger" AS ' BEGIN IF TG_OP = ''DELETE'' THEN INSERT INTO _backup_data (src_table_id, src_table, operation, chg_date_time) values (OLD.id, TG_RELNAME, ''d'', now()); RETURN OLD; ELSIF TG_OP = ''UPDATE'' THEN INSERT INTO _backup_data (src_table_id, src_table, operation, chg_date_time) values (NEW.id, TG_RELNAME, ''u'', now()); RETURN NEW; ELSIF TG_OP = ''INSERT'' THEN INSERT INTO _backup_data (src_table_id, src_table, operation, chg_date_time) values (NEW.id, TG_RELNAME, ''i'', now()); RETURN NEW; END IF; RETURN NULL; -- result is ignored since this is an AFTER trigger END; ' LANGUAGE plpgsql; каюсь - про кавычки не знал :(. большое спасибо за помощь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 04:30 |
|
||
|
|

start [/forum/search_topic.php?author=RubyOnGlass&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
| others: | 659ms |
| total: | 829ms |

| 0 / 0 |
