it-swarm.com.de

Wie führe ich wiederkehrende Aufgaben auf Postgresql ohne ein externes Cron-ähnliches Tool aus?

Ich möchte regelmäßig eine gespeicherte Prozedur aufrufen. Unter Oracle würde ich dafür einen Job erstellen. Ich habe festgestellt, dass Postgresql dies mit einem externen Tool (cron usw.) und PgAgent gut nachahmen kann.

Kennen Sie eine "interne" Alternative, an der das externe Tool nicht beteiligt wäre?

  • Ich möchte Sicherheitsbedenken mit dem in der Befehlszeile des pgAgent gespeicherten Kennwort vermeiden.
  • Ich möchte zusätzliche Systemkonfigurationen zum Ausblenden des Kennworts vermeiden (~/.pgpass).

Postgresql 8.
Linux RedHat 64bit

43
Stephan

Selbst wenn Sie das in Kürze veröffentlichte PostgreSQL 10 oder das aktuelle PostgreSQL 9.6 (zum Zeitpunkt des Schreibens) ausgeführt haben, das keine alte Version wie 8.3 ist, gibt es immer noch keinen integrierten Taskplaner.

So etwas wie PgAgent oder externe Cron-Jobs sind erforderlich, es gibt keine bequeme Problemumgehung.

Die in 9.3 eingeführte Hintergrund-Worker-Funktion sollte hoffentlich ermöglichen, dass ein Tool wie PgAgent in einer späteren Version in den PostgreSQL-Kern verschoben wird, dies wurde jedoch noch nicht durchgeführt. Selbst unter 9.3 müssen Sie noch cron oder pgagent ausführen.

Einige Leute arbeiten an Schedulern, die auf Hintergrundarbeitern basieren, und es kommen einige Patches, die Einrichtungen bieten sollen, die dabei helfen. Ab PostgreSQL 10 gibt es jedoch immer noch keinen qualitativ hochwertigen, weit verbreiteten Scheduler, und die meisten Benutzer verwenden den Cron/MS-Taskplaner/usw.

Bitte beachten Sie auch die Versionsrichtlinie ; Sie führen eine veraltete und nicht unterstützte Version aus.

31
Craig Ringer

Ab PostgreSQL 9.5 können Sie die Erweiterung pg_cron verwenden, die als gemeinsam genutzte Bibliothek in PostgreSQL geladen wird.

Nach dem Einrichten ist das Erstellen eines Jobs ziemlich einfach:

SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);

Dadurch wird der Löschbefehl gemäß dem angegebenen Cron-Zeitplan ausgeführt. Sie können auch @reboot Verwenden, um einen Job zu planen, wenn der Server neu gestartet wird. Pg_cron führt automatisch Jobs aus, wenn Sie einen Hot-Standby-Modus aktivieren.

Anstatt .pgpass zu verwenden, können Sie dem Benutzer cron in pg_hba.conf localhost-Zugriff gewähren.

22
Marco Slot