Deadlock для параллельного выполнения запроса PostgreSQL

Есть монолит в котором по CRON каждый час выполняется приведенный ниже запрос, но данное приложение работает в нескольких экземплярах, и я боюсь что одновременное выполнение может привести к проблемам c блокировками.

На сколько мои подозрения обоснованны? (Решение с встроенным планировщиком PostgreSQL мне не подходит, так как используется Amazon RDS и доступа к соответствующим конфигурационным файлам, для его включения, у меня нет.)

WITH i AS (
UPDATE instances
SET enabled = false
WHERE auto_disable_h IS NOT NULL 
AND status != 'NEW' AND last_order_at <= ago_excl_weekend(auto_disable_h)
RETURNING id)
    UPDATE settings s
    SET archived = true, archived_at = current_timestamp
    FROM i
    WHERE s.archived = false AND i.id = s.instance_id
    RETURNING 1

И функция ago_excl_weekend:

CREATE FUNCTION ago_excl_weekend(
    p_hours integer
) RETURNS timestamp
    LANGUAGE sql AS
$$
SELECT localtimestamp - make_interval(hours => p_hours) -
       (extract(week FROM localtimestamp) -
        extract(week FROM localtimestamp -
                          make_interval(
                                  hours => p_hours + p_hours / 168 * 48
                              )
            )
           )
           * INTERVAL '48' HOUR
$$;

Таблицы instances и settings

CREATE TABLE IF NOT EXISTS instances
(
    id               BIGSERIAL PRIMARY KEY,
    enabled          BOOLEAN      NOT NULL,
    status           VARCHAR(255) NOT NULL,
    last_order_at    TIMESTAMP,
    auto_disable_h   INT
);

CREATE TABLE IF NOT EXISTS settings
(
    id          BIGSERIAL PRIMARY KEY,
    archived    BOOLEAN        NOT NULL DEFAULT FALSE,
    archived_at TIMESTAMP,
    instance_id BIGINT         NOT NULL REFERENCES instances (id)
);

Ответы (0 шт):