Skip to content

duplicate key value violates unique constraint "procrastinate_jobs_queueing_lock_idx_v1" #1432

@jakajancar

Description

@jakajancar

Saw this error in logs:

2025-07-25 00:00:27.509 UTC [103] ERROR:  duplicate key value violates unique constraint "procrastinate_jobs_queueing_lock_idx_v1"
db-1                     | 2025-07-25 00:00:27.509 UTC [103] DETAIL:  Key (queueing_lock)=(global_metrics) already exists.
db-1                     | 2025-07-25 00:00:27.509 UTC [103] CONTEXT:  SQL statement "WITH inserted_jobs AS (
db-1                     |              INSERT INTO procrastinate_jobs (queue_name, task_name, priority, lock, queueing_lock, args, scheduled_at)
db-1                     |              SELECT (job).queue_name,
db-1                     |                     (job).task_name,
db-1                     |                     (job).priority,
db-1                     |                     (job).lock,
db-1                     |                     (job).queueing_lock,
db-1                     |                     (job).args,
db-1                     |                     (job).scheduled_at
db-1                     |              FROM unnest(jobs) AS job
db-1                     |              RETURNING id
db-1                     |          )
db-1                     |          SELECT array_agg(id) FROM inserted_jobs"
db-1                     |      PL/pgSQL function procrastinate_defer_jobs_v1(procrastinate_job_to_defer_v1[]) line 5 at SQL statement
db-1                     |      SQL statement "UPDATE procrastinate_periodic_defers
db-1                     |              SET job_id = (
db-1                     |                  SELECT COALESCE((
db-1                     |                      SELECT unnest(procrastinate_defer_jobs_v1(
db-1                     |                          ARRAY[
db-1                     |                              ROW(
db-1                     |                                  _queue_name,
db-1                     |                                  _task_name,
db-1                     |                                  _priority,
db-1                     |                                  _lock,
db-1                     |                                  _queueing_lock,
db-1                     |                                  _args,
db-1                     |                                  NULL::timestamptz
db-1                     |                              )
db-1                     |                          ]::procrastinate_job_to_defer_v1[]
db-1                     |                      ))
db-1                     |                  ), NULL)
db-1                     |              )
db-1                     |              WHERE id = _defer_id
db-1                     |              RETURNING job_id"
db-1                     |      PL/pgSQL function procrastinate_defer_periodic_job_v2(character varying,character varying,character varying,character varying,integer,character varying,bigint,jsonb) line 16 at SQL statement
db-1                     | 2025-07-25 00:00:27.509 UTC [103] STATEMENT:  SELECT procrastinate_defer_periodic_job_v2($1, $2, $3, $4, $5, $6, $7, $8) AS id;

Job is configured as:

@app.periodic(cron="*/10 * * * * *", queueing_lock="global_metrics")
@app.task
def record_global_metrics(timestamp: int):
    log_global_metrics()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions