
Oznaczanie wiadomości „Zewnętrzny” w Microsoft 365 – jak zwiększyć bezpieczeństwo poczty firmowej
10 stycznia 2026Wstęp
Automatyzacja zadań w bazie danych PostgreSQL – takich jak:
czyszczenie danych,
archiwizacja rekordów,
okresowe raporty,
synchronizacja tabel,
nie powinna odbywać się „na zewnątrz” przez systemowego crona, jeśli można zrobić to bezpośrednio w bazie danych.
Do tego celu służy rozszerzenie pg_cron – wbudowany harmonogram zadań PostgreSQL, działający wewnątrz serwera bazy danych.
Czym jest pg_cron
pg_cron to rozszerzenie PostgreSQL, które:
pozwala uruchamiać zapytania SQL wg harmonogramu,
działa jako background worker PostgreSQL,
nie używa systemowego crona,
wykonuje zadania w kontekście konkretnej bazy i roli.
Przykładowe zastosowania:
DELETE starych danych,
REFRESH MATERIALIZED VIEW,
procedury CALL,
funkcje PL/pgSQL.
Warunki wstępne (bardzo ważne)
1. PostgreSQL musi mieć pg_cron w preload
Sprawdź:
SHOW shared_preload_libraries;Musi zawierać:
pg_cronJeśli nie – edytuj postgresql.conf:
shared_preload_libraries = 'pg_cron'I zrestartuj PostgreSQL:
systemctl restart postgresql⚠️ Bez restartu pg_cron NIE ZADZIAŁA.
2. Ustawienie bazy roboczej pg_cron
Pg_cron działa tylko na jednej bazie.
Sprawdź:
SHOW cron.database_name;Jeśli puste lub błędne:
ALTER SYSTEM SET cron.database_name = 'twoja_baza';Restart:
systemctl restart postgresqlInstalacja rozszerzenia pg_cron
Zaloguj się do docelowej bazy:
psql -d twoja_bazaZainstaluj rozszerzenie:
CREATE EXTENSION IF NOT EXISTS pg_cron;Sprawdzenie:
SELECT * FROM cron.job;Uprawnienia – najczęstszy problem
Kto może tworzyć zadania?
Domyślnie:
tylko superuser PostgreSQL
Jeśli użytkownik aplikacyjny ma tworzyć zadania:
GRANT USAGE ON SCHEMA cron TO app_user;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA cron TO app_user;Jeśli używa funkcji:
GRANT EXECUTE ON FUNCTION cron.schedule TO app_user;Tworzenie zadania pg_cron
Przykład: codzienne czyszczenie tabeli
SELECT cron.schedule(
'czyszczenie_logow',
'0 2 * * *',
$$DELETE FROM logs WHERE created_at < now() - interval '30 days';$$
);Sprawdzenie:
SELECT jobid, jobname, schedule, command FROM cron.job;Sprawdzenie wykonania i błędów
Historia uruchomień:
SELECT * FROM cron.job_run_details
ORDER BY start_time DESC;Typowe statusy:
succeeded
failed
Jeśli failed – masz dokładny komunikat błędu SQL.
Typowe błędy i ich przyczyny
❌ Zadanie się nie uruchamia
Przyczyny:
brak shared_preload_libraries
brak restartu PostgreSQL
zła cron.database_name
❌ permission denied
Przyczyny:
brak uprawnień do tabel
brak EXECUTE na funkcji
zadanie uruchamiane jako inny użytkownik
Pg_cron działa w kontekście właściciela zadania.
❌ pg_cron działa, ale nie widać efektów
Przyczyny:
transakcja rollback (błąd w SQL)
WHERE nie spełnia warunku
test ręczny wykonywany innym użytkownikiem
Testuj:
SET ROLE app_user;
-- potem SQLDobre praktyki pg_cron
✔️ Jedno zadanie = jedno konkretne działanie
✔️ Unikaj długich transakcji
✔️ Loguj efekty (np. INSERT do tabeli audit)
✔️ Nie używaj pg_cron do zadań systemowych
✔️ Monitoruj cron.job_run_details
pg_cron vs systemowy cron
Cecha | pg_cron | system cron |
|---|---|---|
Kontekst bazy | ✔️ | ❌ |
Transakcje | ✔️ | ❌ |
Uprawnienia SQL | ✔️ | ❌ |
Dostęp do OS | ❌ | ✔️ |
Monitoring w DB | ✔️ | ❌ |
Kiedy warto zlecić konfigurację pg_cron?
Jeżeli:
baza jest produkcyjna,
zadania wpływają na dane klientów,
występują błędy lub blokady,
chcesz automatyzować bezpiecznie,
warto skorzystać z pomocy doświadczonych administratorów PostgreSQL.
Partnerhosted – PostgreSQL bezpiecznie i profesjonalnie
W Partnerhosted:
konfigurujemy pg_cron,
audytujemy uprawnienia,
optymalizujemy zadania SQL,
monitorujemy PostgreSQL produkcyjnie.
👉 Jeśli chcesz wdrożyć automatyzację w PostgreSQL bez ryzyka – skontaktuj się z nami.



