@pgpm/database-jobs 0.20.2 → 0.21.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -35
- package/deploy/schemas/app_jobs/procedures/add_job.sql +38 -34
- package/deploy/schemas/app_jobs/procedures/add_scheduled_job.sql +31 -21
- package/deploy/schemas/app_jobs/procedures/force_unlock_workers.sql +20 -0
- package/deploy/schemas/app_jobs/procedures/get_job.sql +27 -51
- package/deploy/schemas/app_jobs/procedures/remove_job.sql +34 -0
- package/deploy/schemas/app_jobs/procedures/run_scheduled_job.sql +2 -0
- package/deploy/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql +11 -2
- package/deploy/schemas/app_jobs/tables/jobs/table.sql +9 -5
- package/deploy/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql +15 -5
- package/deploy/schemas/app_jobs/tables/scheduled_jobs/table.sql +7 -5
- package/deploy/schemas/app_jobs/triggers/tg_add_job_with_fields.sql +1 -1
- package/deploy/schemas/app_jobs/triggers/tg_add_job_with_row.sql +2 -2
- package/deploy/schemas/app_jobs/triggers/tg_add_job_with_row_id.sql +2 -2
- package/package.json +5 -4
- package/pgpm-database-jobs.control +2 -2
- package/pgpm.plan +4 -2
- package/revert/schemas/app_jobs/procedures/force_unlock_workers.sql +7 -0
- package/revert/schemas/app_jobs/procedures/remove_job.sql +7 -0
- package/revert/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql +3 -1
- package/revert/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql +3 -2
- package/verify/schemas/app_jobs/procedures/force_unlock_workers.sql +7 -0
- package/verify/schemas/app_jobs/procedures/remove_job.sql +7 -0
- package/verify/schemas/app_jobs/tables/jobs/indexes/priority_run_at_id_idx.sql +2 -1
- package/verify/schemas/app_jobs/tables/jobs/triggers/notify_worker.sql +1 -2
- package/sql/pgpm-database-jobs--0.15.3.sql +0 -805
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
BEGIN;
|
|
5
5
|
CREATE TABLE app_jobs.scheduled_jobs (
|
|
6
6
|
id bigserial PRIMARY KEY,
|
|
7
|
-
database_id uuid
|
|
8
|
-
|
|
7
|
+
database_id uuid,
|
|
8
|
+
actor_id uuid,
|
|
9
|
+
queue_name text DEFAULT NULL,
|
|
9
10
|
task_identifier text NOT NULL,
|
|
10
11
|
payload json DEFAULT '{}' ::json NOT NULL,
|
|
11
12
|
priority integer DEFAULT 0 NOT NULL,
|
|
@@ -18,15 +19,16 @@ CREATE TABLE app_jobs.scheduled_jobs (
|
|
|
18
19
|
last_scheduled_id bigint,
|
|
19
20
|
CHECK (length(key) < 513),
|
|
20
21
|
CHECK (length(task_identifier) < 127),
|
|
21
|
-
CHECK (max_attempts
|
|
22
|
+
CHECK (max_attempts >= 1),
|
|
22
23
|
CHECK (length(queue_name) < 127),
|
|
23
24
|
CHECK (length(locked_by) > 3),
|
|
24
25
|
UNIQUE (key)
|
|
25
26
|
);
|
|
26
27
|
|
|
27
|
-
COMMENT ON TABLE app_jobs.scheduled_jobs IS 'Recurring/cron-style job definitions
|
|
28
|
+
COMMENT ON TABLE app_jobs.scheduled_jobs IS 'Recurring/cron-style job definitions: each row spawns jobs on a schedule, optionally scoped to a database';
|
|
28
29
|
COMMENT ON COLUMN app_jobs.scheduled_jobs.id IS 'Auto-incrementing scheduled job identifier';
|
|
29
|
-
COMMENT ON COLUMN app_jobs.scheduled_jobs.database_id IS 'Database this scheduled job belongs to
|
|
30
|
+
COMMENT ON COLUMN app_jobs.scheduled_jobs.database_id IS 'Database this scheduled job belongs to (nullable for system-level schedules without tenant context)';
|
|
31
|
+
COMMENT ON COLUMN app_jobs.scheduled_jobs.actor_id IS 'User who created this scheduled job, read from JWT claims at creation time';
|
|
30
32
|
COMMENT ON COLUMN app_jobs.scheduled_jobs.queue_name IS 'Name of the queue spawned jobs are placed into';
|
|
31
33
|
COMMENT ON COLUMN app_jobs.scheduled_jobs.task_identifier IS 'Task type identifier for spawned jobs';
|
|
32
34
|
COMMENT ON COLUMN app_jobs.scheduled_jobs.payload IS 'JSON payload passed to each spawned job';
|
|
@@ -34,7 +34,7 @@ BEGIN
|
|
|
34
34
|
END IF;
|
|
35
35
|
END LOOP;
|
|
36
36
|
PERFORM
|
|
37
|
-
app_jobs.add_job (
|
|
37
|
+
app_jobs.add_job (fn, app_jobs.json_build_object_apply (args));
|
|
38
38
|
IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
|
|
39
39
|
RETURN NEW;
|
|
40
40
|
END IF;
|
|
@@ -8,12 +8,12 @@ CREATE FUNCTION app_jobs.tg_add_job_with_row ()
|
|
|
8
8
|
BEGIN
|
|
9
9
|
IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
|
|
10
10
|
PERFORM
|
|
11
|
-
app_jobs.add_job (
|
|
11
|
+
app_jobs.add_job (TG_ARGV[0], to_json(NEW));
|
|
12
12
|
RETURN NEW;
|
|
13
13
|
END IF;
|
|
14
14
|
IF (TG_OP = 'DELETE') THEN
|
|
15
15
|
PERFORM
|
|
16
|
-
app_jobs.add_job (
|
|
16
|
+
app_jobs.add_job (TG_ARGV[0], to_json(OLD));
|
|
17
17
|
RETURN OLD;
|
|
18
18
|
END IF;
|
|
19
19
|
END;
|
|
@@ -9,12 +9,12 @@ CREATE FUNCTION app_jobs.tg_add_job_with_row_id ()
|
|
|
9
9
|
BEGIN
|
|
10
10
|
IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
|
|
11
11
|
PERFORM
|
|
12
|
-
app_jobs.add_job (
|
|
12
|
+
app_jobs.add_job (tg_argv[0], json_build_object('id', NEW.id));
|
|
13
13
|
RETURN NEW;
|
|
14
14
|
END IF;
|
|
15
15
|
IF (TG_OP = 'DELETE') THEN
|
|
16
16
|
PERFORM
|
|
17
|
-
app_jobs.add_job (
|
|
17
|
+
app_jobs.add_job (tg_argv[0], json_build_object('id', OLD.id));
|
|
18
18
|
RETURN OLD;
|
|
19
19
|
END IF;
|
|
20
20
|
END;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pgpm/database-jobs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.2",
|
|
4
4
|
"description": "Database-specific job handling and queue management",
|
|
5
5
|
"author": "Dan Lynch <pyramation@gmail.com>",
|
|
6
6
|
"contributors": [
|
|
@@ -21,10 +21,11 @@
|
|
|
21
21
|
"test:watch": "jest --watch"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"pgpm": "^4.
|
|
24
|
+
"pgpm": "^4.16.6"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@pgpm/
|
|
27
|
+
"@pgpm/jwt-claims": "0.21.2",
|
|
28
|
+
"@pgpm/verify": "0.21.2"
|
|
28
29
|
},
|
|
29
30
|
"repository": {
|
|
30
31
|
"type": "git",
|
|
@@ -34,5 +35,5 @@
|
|
|
34
35
|
"bugs": {
|
|
35
36
|
"url": "https://github.com/constructive-io/pgpm-modules/issues"
|
|
36
37
|
},
|
|
37
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "c7d836c99c7ce519e9bb79e6343bee3741781766"
|
|
38
39
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# pgpm-database-jobs extension
|
|
2
2
|
comment = 'pgpm-database-jobs extension'
|
|
3
|
-
default_version = '0.
|
|
3
|
+
default_version = '0.22.0'
|
|
4
4
|
module_pathname = '$libdir/pgpm-database-jobs'
|
|
5
|
-
requires = 'plpgsql,pgcrypto,pgpm-verify'
|
|
5
|
+
requires = 'plpgsql,pgcrypto,pgpm-verify,pgpm-jwt-claims'
|
|
6
6
|
relocatable = false
|
|
7
7
|
superuser = false
|
|
8
8
|
|
package/pgpm.plan
CHANGED
|
@@ -34,5 +34,7 @@ schemas/app_jobs/procedures/get_job [schemas/app_jobs/schema schemas/app_jobs/ta
|
|
|
34
34
|
schemas/app_jobs/procedures/fail_job [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table schemas/app_jobs/tables/job_queues/table] 2025-08-26T23:57:41Z pgpm <pgpm@5b0c196eeb62> # add schemas/app_jobs/procedures/fail_job
|
|
35
35
|
schemas/app_jobs/procedures/complete_jobs [schemas/app_jobs/schema schemas/app_jobs/tables/job_queues/table schemas/app_jobs/tables/jobs/table] 2025-08-26T23:57:41Z pgpm <pgpm@5b0c196eeb62> # add schemas/app_jobs/procedures/complete_jobs
|
|
36
36
|
schemas/app_jobs/procedures/complete_job [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table schemas/app_jobs/tables/job_queues/table] 2025-08-26T23:57:41Z pgpm <pgpm@5b0c196eeb62> # add schemas/app_jobs/procedures/complete_job
|
|
37
|
-
schemas/app_jobs/procedures/add_scheduled_job [schemas/app_jobs/schema schemas/app_jobs/tables/scheduled_jobs/table] 2025-08-26T23:57:41Z pgpm <pgpm@5b0c196eeb62> # add schemas/app_jobs/procedures/add_scheduled_job
|
|
38
|
-
schemas/app_jobs/procedures/add_job [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table schemas/app_jobs/tables/job_queues/table] 2025-08-26T23:57:41Z pgpm <pgpm@5b0c196eeb62> # add schemas/app_jobs/procedures/add_job
|
|
37
|
+
schemas/app_jobs/procedures/add_scheduled_job [schemas/app_jobs/schema schemas/app_jobs/tables/scheduled_jobs/table pgpm-jwt-claims:schemas/jwt_private/procedures/current_database_id] 2025-08-26T23:57:41Z pgpm <pgpm@5b0c196eeb62> # add schemas/app_jobs/procedures/add_scheduled_job
|
|
38
|
+
schemas/app_jobs/procedures/add_job [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table schemas/app_jobs/tables/job_queues/table pgpm-jwt-claims:schemas/jwt_private/procedures/current_database_id pgpm-jwt-claims:schemas/jwt_public/procedures/current_user_id] 2025-08-26T23:57:41Z pgpm <pgpm@5b0c196eeb62> # add schemas/app_jobs/procedures/add_job
|
|
39
|
+
schemas/app_jobs/procedures/remove_job [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table] 2025-08-26T23:57:41Z pgpm <pgpm@5b0c196eeb62> # add schemas/app_jobs/procedures/remove_job
|
|
40
|
+
schemas/app_jobs/procedures/force_unlock_workers [schemas/app_jobs/schema schemas/app_jobs/tables/jobs/table schemas/app_jobs/tables/job_queues/table] 2025-08-26T23:57:41Z pgpm <pgpm@5b0c196eeb62> # add schemas/app_jobs/procedures/force_unlock_workers
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
-- Revert schemas/app_jobs/tables/jobs/triggers/notify_worker from pg
|
|
2
2
|
BEGIN;
|
|
3
|
-
DROP TRIGGER _900_notify_worker ON app_jobs.jobs;
|
|
3
|
+
DROP TRIGGER IF EXISTS _900_notify_worker ON app_jobs.jobs;
|
|
4
|
+
DROP TRIGGER IF EXISTS _900_after_insert ON app_jobs.jobs;
|
|
5
|
+
DROP FUNCTION IF EXISTS app_jobs.tg_jobs__after_insert;
|
|
4
6
|
COMMIT;
|
|
5
|
-
|