LINUX.ORG.RU

Вопрос по PostgreSQL 8.2 и периодическим атрибутам


0

0

Доброго времени суток!

Ознакомившись с обучающим руководством по PostgreSQL и просмотрев manual возник вопрос.

Обучающее руководство: http://www.hardline.ru/2/21/1126/1517-4.html

Необходимо сделать некоторые атрибуты класса (таблицы) периодическими, т.е. чтобы при изменении значения в атрибуте (запрос на обновление), автоматически запоминалась дата изменения, в последсвии, при выборке с условием временного интервала, берется значение из этого временного интервала (всегда последнее значение).

Вобщем была такая вещь в PostgreSQL 6 как Time Trevel, но ее убрали. В руководстве сказано: "Можно реализовать механизм при помощи триггеров". Я в PostgreSQL новичок и не очень представляю, что такое триггеры, и как они мне помогут. Еще появилась идея, использовать для моей задумки массивы, но тут для меня стоит вопрос: "Как добавлять значение в массив?"(или при каждом обновлении атрибут нужно будет перезаписывать заново, со всеми предидущими значениями?).

Периодических значений будет немного, для одного экземпляра (строки в таблице) не более 10, чаще 2-3.

Хотелось бы услышать ваши советы и предложения, а также ссылки на документацию по данному вопросу.

Спасибо.

>Я в PostgreSQL новичок и не очень представляю, что такое триггеры, и как они мне помогут

>Хотелось бы услышать ваши советы и предложения

выяснить, кто такие триггеры. прости, но твой вопрос аналогичен: "мне сказали, что яблочный уксус поможет и его можно купить в магазине. что такое магазин, я не знаю. зато есть сода - поможет?"

http://www.postgresql.org/docs/8.2/interactive/triggers.html - triggerы в постгресе

потом читай главу 37

а вообще wiki тебе в руки: http://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B8%D0%B3%D0%B3%D0%B5%D1%80_%28%D...

Pi ★★★★★
()

Если я вас правильно понял, вам нужно хранить историю изменений.
Заводите таблицу с аналогичной основной таблице структурой + поле
"дата изменения". На основную таблицу ставите триггер, перед изменением текущее состояние записывать в историю.
Т.о. актуальное состояние хранится в основной таблице, а все предыдущие
версии в таблице истории изменений.
Для выборки делаете функцию, которая уже по дате смотрит, откуда нужно вытащить строку: из таблицы или из истории.

anonymous
()
Ответ на: комментарий от Falgrim

а не проще ли вообще держать одну таблицу? тупо пишем в нее каждый раз новую запись и все :) избыточность штука нужная, но не повсеместно :)

Deleted
()
Ответ на: комментарий от Deleted

Нет, там так надо сделать, чтобы получать значение на какую-то дату. Если надо было последнее значение, то я бы не заморачивался :)

Falgrim
() автор топика
Ответ на: комментарий от Falgrim

всю строку мне не надо, я в другую писать буду только значение нужное, дату, и oid строки для которой значение получить нужно, а потом триггер доставать будет или процедура.

Falgrim
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.