Skip to content
This repository was archived by the owner on May 26, 2022. It is now read-only.

Commit 2bcb94c

Browse files
committed
finished pg_cron
1 parent c5b4a29 commit 2bcb94c

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

TODO.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ Add:
1414
* http://jinchengli.me/post/postgres-query-opt/
1515
* https://habrahabr.ru/company/postgrespro/blog/282770/
1616
* https://github.com/michaelpq/pg_arman
17-
* https://github.com/citusdata/pg_cron
1817
* https://www.citusdata.com/blog/2016/10/12/count-performance/
1918
* https://habrahabr.ru/company/etagi/blog/314000/
2019
* https://www.citusdata.com/blog/2016/11/04/autovacuum-not-the-enemy/

extensions/pg_cron.tex

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,40 @@ \subsection{Установка и использование}
1919
По умолчанию \lstinline!pg_cron! ожидает, что все таблицы с метаданными будут находится в \lstinline!postgres! базе данных. Данное поведение можно изменить и указать через параметр \lstinline!cron.database_name! в \lstinline!postgresql.conf! другую базу данных, где \lstinline!pg_cron! будет хранить свои данные.
2020

2121
Внутри \lstinline!pg_cron! использует libpq библиотеку, поэтому потребуется разрешить подключения с \lstinline!localhost! без пароля (\lstinline!trust! в \lstinline!pg_hba.conf!) или же создать \href{https://www.postgresql.org/docs/current/static/libpq-pgpass.html}{.pgpass} файл для настройки подключения к базе.
22+
23+
Для создания cron задач используется функция \lstinline!cron.schedule!:
24+
25+
\begin{lstlisting}[language=SQL,label=lst:pgcron3,caption=Cron.schedule]
26+
-- Delete old data on Saturday at 3:30am (GMT)
27+
SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);
28+
schedule
29+
----------
30+
42
31+
\end{lstlisting}
32+
33+
Для удаления созданых задач используется \lstinline!cron.unschedule!:
34+
35+
\begin{lstlisting}[language=SQL,label=lst:pgcron4,caption=Cron.unschedule]
36+
-- Vacuum every day at 10:00am (GMT)
37+
SELECT cron.schedule('0 10 * * *', 'VACUUM');
38+
schedule
39+
----------
40+
43
41+
42+
-- Stop scheduling a job
43+
SELECT cron.unschedule(43);
44+
unschedule
45+
------------
46+
t
47+
\end{lstlisting}
48+
49+
В целях безопасности cron задачи выполняются в базе данных, в которой \lstinline!cron.schedule! функция была вызвана с правами доступа текущего пользователя.
50+
51+
Поскольку \lstinline!pg_cron! использует libpq библиотеку, это позволят запускать cron задачи на других базах данных (даже на других серверах). С помощью суперпользователя возможно модифицировать \lstinline!cron.job! таблицу и добавить в нее параметры подключения к другой базе через \lstinline!nodename! и \lstinline!nodeport! поля:
52+
53+
\begin{lstlisting}[language=SQL,label=lst:pgcron5,caption=Cron.job]
54+
INSERT INTO cron.job (schedule, command, nodename, nodeport, database, username)
55+
VALUES ('0 4 * * *', 'VACUUM', 'worker-node-1', 5432, 'postgres', 'marco');
56+
\end{lstlisting}
57+
58+
В таком случае нужно будет создать \href{https://www.postgresql.org/docs/current/static/libpq-pgpass.html}{.pgpass} файл для настройки подключения к базе на другом сервере.

0 commit comments

Comments
 (0)