Chciałbym regularnie wywoływać procedurę przechowywaną. Na Oracle stworzyłbym do tego zadanie. Przekonałem się, że Postgresql może naśladować to dobrze za pomocą zewnętrznego narzędzia (cron itp.) I PgAgent.
Czy znasz „wewnętrzną” alternatywę, która nie wymagałaby użycia zewnętrznego narzędzia?
- Chcę uniknąć problemów związanych z bezpieczeństwem hasła zapisanego w wierszu polecenia pgAgent.
- Chcę uniknąć dodatkowej konfiguracji systemu w celu ukrycia hasła (
~/.pgpass
).
Postgresql 8.3
Linux RedHat 64bit
postgresql
jobs
scheduled-tasks
Stephan
źródło
źródło
Odpowiedzi:
Nawet jeśli korzystałeś z wkrótce dostępnej (w momencie pisania) wersji PostgreSQL 10 lub obecnej wersji PostgreSQL 9.6, a nie starej wersji, takiej jak 8.3, nadal nie ma wbudowanego harmonogramu zadań.
Wymagane jest coś takiego jak PgAgent lub zewnętrzne zadania cron, nie ma wygodnego obejścia.
Mam nadzieję, że funkcja pracująca w tle, wprowadzona w 9.3, powinna pozwolić na przeniesienie narzędzia takiego jak PgAgent do rdzenia PostgreSQL w późniejszym wydaniu, ale jeszcze tego nie zrobiono. Nawet w wersji 9.3 nadal musisz uruchomić crona lub pgagenta.
Kilka osób pracuje nad harmonogramami opartymi na pracownikach działających w tle, a nadchodzi kilka poprawek, które powinny zapewnić ułatwienia w tym zakresie. Ale od PostgreSQL 10 nadal nie ma dobrej jakości, powszechnie przyjętego harmonogramu, a większość ludzi korzysta z harmonogramu zadań cron / ms / itp.
Zobacz także zasady dotyczące wersji ; używasz przestarzałej i nieobsługiwanej wersji.
źródło
Please take a look at the version policy
, aktualizacja Postgresql nie jest opcją.standard_conforming_strings
ibytea_output
.Począwszy od PostgreSQL 9.5, możesz używać rozszerzenia pg_cron , które jest ładowane jako biblioteka współdzielona do PostgreSQL.
Po skonfigurowaniu utworzenie zadania jest dość proste:
Spowoduje to uruchomienie polecenia delete zgodnie z określonym harmonogramem cron. Możesz także użyć
@reboot
do zaplanowania zadania po ponownym uruchomieniu serwera, a pg_cron automatycznie uruchomi zadania, jeśli promujesz gorący stan gotowości.Zamiast używać .pgpass, możesz zapewnić dostęp do hosta lokalnego dla użytkownika cron w pg_hba.conf.
źródło
Naprawdę, naprawdę nie chcesz tego robić. Postgres nie jest systemem operacyjnym, to serwer bazy danych. Nawet jeśli baza danych obsługuje uruchamianie zaplanowanych zadań, nie jest dobrym pomysłem nadużywanie takiej bazy danych.
Jeśli martwisz się, że nie chcesz konfigurować hasła i innych elementów, łatwo to rozwiązać. Skonfiguruj lokalne połączenie z gniazdem uniksowym, używając zamiast tego uwierzytelniania zaufania lub tożsamości , uruchom cronjob jako ten użytkownik.
W konfiguracji „po wyjęciu z pudełka” zazwyczaj postgres konfiguruje użytkownika systemu
postgres
do uruchamiania serwera db, a ten użytkownik systemu jest zwykle już wstępnie skonfigurowany, aby mógł połączyć się z serwerem lokalnym za pomocą uwierzytelnienia zaufania podczas łączenia przez lokalne gniazdo unix. Możesz uruchomić cronjob jako użytkownik systemu postgres, połączyć się z lokalnym gniazdem, a następnie zmienić rolę, jeśli nie chcesz, aby procedura składowana działała z uprawnieniami administratora.W domyślnej konfiguracji możesz po prostu to zrobić:
W edytorze dodaj do wpisu crontab w następujący sposób:
a w pliku /path/to/run_stored_procedure.sh wystarczy użyć psql, aby wywołać procedurę sklepów
źródło