Триггер для изменения даты для базы данных PostgreSQL! - PullRequest
0 голосов
/ 08 февраля 2011

Как мне написать триггер, который будет срабатывать при изменении LocalDate сервера базы данных PostgreSQL? Я хочу получить уведомление об изменении LocalDate (дата сервера базы данных postgresql), что будет наиболее эффективным способом сделать это? Приложение, которому требуется уведомление, написано на Java.

Дополнительные уточнения: Я строю систему общественного транспорта, и мне нужно устанавливать расписание дня в начале каждого дня. И день соответствует времени сервера базы данных. Как мне добиться этого с минимальными накладными расходами?

Ответы [ 3 ]

2 голосов
/ 08 февраля 2011

Единственное, о чем я могу думать, - это чтобы запланированное задание (задание на стороне сервера) вставляло текущую дату в таблицу один раз в день, скажем, в 12:01 по местному времени.Триггер может ответить на это.

1 голос
/ 09 февраля 2011

Нет способа сделать это только с использованием базы данных без периодической проверки.

Если вам нужно уведомление в клиентском приложении, тогда можно использовать LISTEN / NOTIFY.Вам необходимо настроить планировщик сервера (например, cron) для запуска сценария, который подключается к серверу в 00:00 и выдает NOTIFY.Но для этого потребуется Java-клиент для периодической проверки на PQnotifies, что не лучше, чем просто периодическая проверка current_date.

Для чего вам это нужно?Возможно, есть лучшее решение для вашей проблемы подчеркивания.


Ваш единственный разумный вариант - создать программу на сервере, которая будет выполнять ежедневное обслуживание и планировать ее с помощью планировщика операционной системы сервера (cron в Unices, Windows Task).Планировщик в Windows).

Для дополнительной надежности:

  • установите свой сценарий обслуживания, чтобы заблокировать специальное обслуживание таблицы (дата last_maintenance)
  • , когда клиент подключается кбаза данных должна проверить, если current_date = last_maintenance, и выдать ошибку, если это не так;
  • , если текущее обслуживание выполняется, тогда оно просто будет ждать блокировки до завершения.
0 голосов
/ 08 февраля 2011

Что такое "LocalDate"?Вы имеете в виду системную дату сервера?В этом случае это невозможно, срабатывает триггер при изменении записи в таблице.Проверьте руководство: http://www.postgresql.org/docs/current/static/plpgsql-trigger.html

...