Задача: написать триггер который будет вести лог изменении данных таблицы.
Нюанс: триггер должен работать независимо от изменения структуры таблицы.
Пример:
В таблице три поля- имя, фамилия, отчество. При вставке записи триггер пишет в лог 3 записи
(имя поля) (значение)
1.имя иван
2.фамилия иванов
3.отчество иванович
Так вот, чтобы триггер работал независимо от изменения структуры таблицы я выбираю имена полей для данной таблицы из information_schema и пытаюсь подставить в имя поля для псевдонима new, в цикле по полям выполняю: (execute 'insert into log (name,value) values ('||n||',new.'||n||')' - как-то так... ). Собственно проблема в том, что new в execute не видится.
Есть ли у кого-нибудь мысли по этому поводу?
Кстати postgre 7.3 (в 8 по моему есть какая-то фишка позволяющая new передать в execute)
На дворе версия 9.0.x уже,
На дворе версия 9.0.x уже, советую работать с ней.
По поводу самой задачи ничего не скажу - слишком специфично, надо сидеть и долго нудно пробовать все возможные варианты.
Не дають
Я бы с удовольствием! Только у нас все ПО сертифицируется, и как каждую версию это хлопотно (наверное).
Просто версия 7.x потеряла
Просто версия 7.x потеряла актуальность эдак лет 5 назад. В 9-ке много нового, более удобного, работает быстрее, подчищено много багов и т.д. Где вот мне например версию 7 взять для моей Fedora Linux 14? Такого старья у меня нет, проверять не на чем, подсказать вам в виду этого тоже затруднительно.
Вариант динамического запроса
Вариант динамического запроса в триггере не самая удачная идея, и потом зачем хранить исорию в базе если ее нельзя будет использовать, для задачи "на всякий случай" вполне подойдет сохранение информации во внешних файлах истории к примеру коммандой copy с периодическим запуском.
Если же информация все-таки будет использоваться то вполне можно использовать такой триггер
при этом структура таблицы лога должна соответствовать структуре основной таблицы, а поля "операция, дата, пользователь" в таблице логирования остаются неизменными.
Задача, собственно, вот в
Задача, собственно, вот в чем:
Одно подразделение разрабатывает базу, другое должно забирать из этой базы инфу и заливать к себе в базу. В обоих подразделениях разработка в самом разгаре (структуры меняют каждый день). Первое подразделение поручило мне разработать интерфейс передачи данных во второе.
Так как каждый день переписывать триггера не очень хочется я разбил все изменения на вставку объектов (их пара, тройка), которые собственно устаканились, и установку значений атрибутов для этих объектов (часть которая меняется). Заливая эти операции в лог я планировал отдавать их во второе подразделение, а там уж пусть делают что хотят. Таков был план. Я понимаю, что задача бестолковая, но все-таки....
Вопрос знатокам: при удалении
Вопрос знатокам: при удалении из таблицы поля, сработает ли триггер update этого поля?
для Вашей задачи чем не
для Вашей задачи чем не устраевает copy?
-нет