1
1
# pgpro_scheduler - расширение PostgreSQL для управления расписанием задач
2
2
3
3
pgpro_scheduler это планировщик задач для СУБД PostgreSQL, который позволяет
4
- планировать исполнение задач в базе и контроллировать их исполнение.
4
+ планировать выполнение задач в базе и контроллировать их исполнение.
5
5
6
6
Задачи это наборы SQL команд. Расписание выполнения задач задается либо строкой
7
7
cron, либо указанием конкретных дат запуска, либо JSON объектом, в котором
8
8
указывается в какие дни часы и минуты задача должна быть запущена. Возможна
9
9
комбинация методов описания расписания.
10
10
11
11
Каждая задача имеет возможность для вычисления времени следующего своего
12
- запуска. Набор SQL команд в задаче может обрабатываться в разных транзакциях,
13
- по транзакции на команду, или в одной. В последнем случае имеется возможность
14
- задания SQL конманды , которая будет выполняться в случае аварийного завершения
15
- транзакции.
12
+ запуска. Набор SQL команд в задаче может обрабатываться в одной транзакции или
13
+ же каждая команда может использовать свою индивидуальную транзакцию.
14
+ Имеется возможность задания SQL команды , которая будет выполняться в случае
15
+ аварийного завершения транзакции.
16
16
17
17
## Installation
18
18
@@ -36,10 +36,11 @@ pgpro_scheduler это расширение PostgreSQL и не тербует н
36
36
Расширение определяет ряд переменных в PostgreSQL (GUC), которые позволяют
37
37
управлять его конфигурацией.
38
38
39
- * ** schedule.enable** - двоичная переменная, которая поределяет разрешено ли
39
+ * ** schedule.enable** - двоичная переменная, которая определяет разрешено ли
40
40
выполнение расширения. По умолчанию: false.
41
41
* **schedule.database** - строковая переменная, указывает с какими базам может
42
- работать расширение. По умолчанию - пустая строка.
42
+ работать планировщик. Что бы указать несколько баз, нужно перечислить их
43
+ имена через запятую. По умолчанию - пустая строка.
43
44
* ** schedule.nodename** - строковая переменная, содержит название узла.
44
45
По умолчанию - master. Если расширение используется на одной машине,
45
46
то переменная не имеет смысла.
@@ -81,7 +82,7 @@ PostgreSQL, которые описаны в предыдущем разделе
81
82
# SELECT pg_reload_conf();
82
83
83
84
Если вам не нужны указания различных значений для разных баз данных, то все это
84
- можно занести в конфигурационный файл PostgreSQL и перечитать конфигурацию.
85
+ можно занести в конфигурационный файл PostgreSQL, и перечитать конфигурацию.
85
86
Перезапуска не требуется.
86
87
87
88
Пример записей в ` $DATADIR/postgresql.conf ` , если количество одновременно
@@ -121,23 +122,26 @@ PostgreSQL, которые описаны в предыдущем разделе
121
122
Планировщик определяет 2 SQL типа, которые он использует в качестве типов
122
123
возвращаемых значений для своих функций.
123
124
124
- ** cron_rec** - используется для информации о записи задачи в таблице расписания.
125
+ ### cron_rec
126
+
127
+ Тип используется для информации о задаче в таблице расписания.
125
128
126
129
CREATE TYPE schedule.cron_rec AS(
127
130
id integer, -- идентификатор задачи
128
131
node text, -- имя узла, на котором она будет выполняться
129
132
name text, -- имя задачи
130
133
comments text, -- комментарий к задаче
131
134
rule jsonb, -- правила построения расписания
132
- commands text[], -- sql комманды , которые будут выполненны
135
+ commands text[], -- sql команды , которые будут выполнены
133
136
run_as text, -- имя пользователя, с которым будет выполняться
134
137
-- задача
135
138
owner text, -- имя пользователя, который создал задачу
136
139
start_date timestamp, -- нижняя граница временного периода, во время
137
- -- которого допускается выполнение задачи
138
- -- граница считаеися открытой если значение NULL
140
+ -- которого допускается выполнение задачи,
141
+ -- граница считается открытой, если значение NULL
139
142
end_date timestamp, -- верхняя граница временного периода, во время
140
- -- граница считаеися открытой если значение NULL
143
+ -- которого допускается выполнение задачи,
144
+ -- граница считается открытой, если значение NULL
141
145
use_same_transaction boolean, -- если true, то набор команд будет
142
146
-- выполняться в одной транзакции
143
147
last_start_available interval, -- максимальное время, на которое может
@@ -149,7 +153,7 @@ PostgreSQL, которые описаны в предыдущем разделе
149
153
max_run_time interval, -- максимальное время выполнения задачи
150
154
onrollback text, -- SQL команда, которая будет выполнена в случае
151
155
-- аварийного завершения транзакции
152
- next_time_statement text, -- SQL команда, которая будет выполненна
156
+ next_time_statement text, -- SQL команда, которая будет выполнена
153
157
-- после завершения основного набора SQL
154
158
-- команд, которая возвращает следующее
155
159
-- время выполнения задачи
@@ -159,22 +163,25 @@ PostgreSQL, которые описаны в предыдущем разделе
159
163
-- которые не позволяют ее выполнять далее
160
164
);
161
165
162
- ** cron_job** используется для информации о конкретном исполнении задачи.
166
+ ###cron_job
167
+
168
+ Тип используется для информации о конкретном исполнении задачи.
163
169
164
170
CREATE TYPE schedule.cron_job AS(
165
171
cron integer, -- идентификатор задачи
166
172
node text, -- имя узла, на котором она выполняться
167
173
scheduled_at timestamp, -- запланированное время выполнения
168
174
name text, -- имя задачи
169
175
comments text, -- комментарий к задаче
170
- commands text[], -- sql комманды для выполнения
171
- run_as text, -- имя пользователя, из-под которого идет выполнение
176
+ commands text[], -- sql команды для выполнения
177
+ run_as text, -- имя пользователя, с правами которого будет
178
+ -- выполнен набор команд
172
179
owner text, -- имя пользователя, создавшего задачу
173
180
use_same_transaction boolean, -- если true, то набор команд
174
181
-- выполняется в одной транзакции
175
182
started timestamp, -- время, когда задача была запущена
176
183
last_start_available timestamp, -- время, до которого задача должна
177
- -- быть запцщена
184
+ -- быть запущена
178
185
finished timestamp, -- время, когда задача была завершена
179
186
max_run_time interval, -- время, за которое задача должна выполнится,
180
187
-- иначе она будет аварийно остановлена
@@ -209,7 +216,7 @@ PostgreSQL, которые описаны в предыдущем разделе
209
216
Агрументы:
210
217
211
218
* ** cron** - crontab-like строка для задания расписания выполнения
212
- * ** sqls** - набор SQL комманд для выполнения в виде массива строк
219
+ * ** sqls** - набор SQL команд для выполнения в виде массива строк
213
220
* ** node** - название узла, опционально
214
221
215
222
Возвращает идентификатор созданной задачи.
@@ -233,7 +240,7 @@ PostgreSQL, которые описаны в предыдущем разделе
233
240
Агрументы:
234
241
235
242
* ** date** - время исполнения задачи
236
- * ** sqls** - набор SQL комманд для выполнения в виде массива строк
243
+ * ** sqls** - набор SQL команд для выполнения в виде массива строк
237
244
* ** node** - название узла, опционально
238
245
239
246
Возвращает идентификатор созданной задачи.
@@ -244,7 +251,7 @@ PostgreSQL, которые описаны в предыдущем разделе
244
251
245
252
Агрументы:
246
253
247
- * ** dates** - набор дат для выполнения комманды в виде массива
254
+ * ** dates** - набор дат для выполнения команды в виде массива
248
255
* ** sql** - строка, SQL команда для выполнения
249
256
* ** node** - название узла, опционально
250
257
@@ -256,8 +263,8 @@ PostgreSQL, которые описаны в предыдущем разделе
256
263
257
264
Агрументы:
258
265
259
- * ** dates** - набор дат для выполнения комманды в виде массива
260
- * ** sqls** - набор SQL комманд для выполнения в виде массива строк
266
+ * ** dates** - набор дат для выполнения команды в виде массива
267
+ * ** sqls** - набор SQL команд для выполнения в виде массива строк
261
268
* ** node** - название узла, опционально
262
269
263
270
Возвращает идентификатор созданной задачи.
@@ -269,7 +276,7 @@ PostgreSQL, которые описаны в предыдущем разделе
269
276
Единтвенный принимаемый параметр является объектом JSONB, который содержит
270
277
информацию о создаваемой задаче.
271
278
272
- JSONB объект может содержат следующие ключи, не все они являются обязательными:
279
+ JSONB объект может содержать следующие ключи, не все они являются обязательными:
273
280
274
281
* ** name** - имя задачи;
275
282
* ** node** - имя узла, на котором будет выполняться задача;
@@ -278,15 +285,15 @@ JSONB объект может содержат следующие ключи, н
278
285
* ** rule** - расписание в виде JSONB объекта (смотри далее);
279
286
* ** command** - SQL команда для выполнения;
280
287
* ** commands** - набор SQL команд для выполнения в виде массива;
281
- * ** run\_ as** - пользователь, с правами которого будет исполняться задача
288
+ * ** run\_ as** - пользователь, с правами которого будет выполняться задача
282
289
* ** start\_ date** - начало временного периода, во время которого возможен
283
290
запуск выполнения задачи, если не указано, то нижняя граница не определена;
284
291
* ** end\_ date** - окончание временного периода, во время которого возможен
285
292
запуск выполнения задачи, если не указано, то верхняя граница не определена;
286
293
* ** date** - конкретная дата запуска задачи;
287
- * ** dates** - надор дат запуска задачи;
294
+ * ** dates** - набор дат запуска задачи;
288
295
* ** use\_ same\_ transaction** - устанавливает будет ли набор команд выполняться
289
- в рамках одной транзакции. По умолчанию: true TODO ???
296
+ в рамках одной транзакции. По умолчанию: false;
290
297
* ** last\_ start\_ available** - на какое количество времени может быть отложено
291
298
выполнение задачи, если в момент запуска по расписанию уже запущено
292
299
максимально возможное количество задач. Время задается в формате
@@ -296,10 +303,10 @@ JSONB объект может содержат следующие ключи, н
296
303
* ** max\_ run\_ time** - определяет максимально возможное время выполнения
297
304
задачи. Время задается в формате типа `interval`. Если время не определено,
298
305
то время исполнения не ограничено. По умолчанию время не определено;
299
- * ** onrollback** - SQL команда, которая будет выполнена если транзакция
306
+ * ** onrollback** - SQL команда, которая будет выполнена, если транзакция
300
307
завершится аварийно. По умолчанию неопределена;
301
308
* ** next\_ time\_ statement** - SQL команда, которая будет выполнена для
302
- определения следующего времени записи задачи.
309
+ определения следующего времени запуска задачи.
303
310
304
311
Правила для вычисления расписания выполнения задачи могут быть заданы в виде
305
312
строки cron (ключ ` cron ` ), а так же в виде JSONВ объекта (ключ ` rule ` ).
@@ -321,9 +328,9 @@ JSONB объект может содержат следующие ключи, н
321
328
Все вышеописанные методы задания расписания могут быть скомбинированны между
322
329
собой. Но использование хотя бы одного из них обязательно.
323
330
324
- Ключ ` next_time_statement ` используется для того, что бы вычислить слеюующее
331
+ Ключ ` next_time_statement ` используется для того, что бы вычислить следующее
325
332
время выполнения задачи. Если он определен, то первое время выполнения задачи
326
- будет рассчитано с помощью методов приведенных выще , а последующие запуски будут
333
+ будет рассчитано с помощью методов приведенных выше , а последующие запуски будут
327
334
поставленны в расписание в то время, которое вернет SQL команда, указанная
328
335
в данном ключе. Команда должна возвращать запись, в первом поле которого
329
336
должно сожержаться значение следующего времени запуска типа `timestamp with time
@@ -348,7 +355,7 @@ SQL для вычисления следующего времени запуск
348
355
349
356
Сами SQL команды задаются либо ключом ` command ` , либо ключом ` commands ` .
350
357
Первый это одна SQL команда, второй набор команд. На самом деле в ключ
351
- ` command ` можно передать несколько команд разделенных точкой с запятой. Тогда
358
+ ` command ` можно передать несколько команд, разделенных точкой с запятой. Тогда
352
359
они все исполнятся в одной транзакции. Предпочтительно для набора команд
353
360
использовать ключ ` commands ` , так как в сочетании с ключом
354
361
` use_same_transaction ` , вы можете задавать исполнение команд в одной транзакции
@@ -376,7 +383,6 @@ SQL для вычисления следующего времени запуск
376
383
377
384
### schedule.set_job_attribute(job_id integer, name text, value text || anyarray)
378
385
379
- The function allows to set exact property of existing job.
380
386
Функция редактирует какое-то одно конкретное свойство существующей задачи.
381
387
382
388
Аргументы:
@@ -393,6 +399,9 @@ The function allows to set exact property of existing job.
393
399
Функция возвращает двоичное значение, true, если изменение успешное, false -
394
400
в случае неуспеха.
395
401
402
+ Пользователю, если он не суперпользователь, позволено менять свойства только
403
+ тех задач, владельцем которых он является.
404
+
396
405
### schedule.deactivate_job(job_id integer)
397
406
398
407
Функция деактивирует задачу и приостанавливает ее последующее выполнение.
@@ -467,7 +476,7 @@ The function allows to set exact property of existing job.
467
476
Просматривать задачи, исполняемые другими пользователями, может только
468
477
суперпользователь.
469
478
470
- Описание типа ` cron_rec ` смотрие в разделе ** SQL типы** .
479
+ Описание типа ` cron_rec ` смотрите в разделе ** SQL типы** .
471
480
472
481
### schedule.get_user_active_jobs(username text)
473
482
0 commit comments