On Fri, Oct 7, 2022 at 7:54 AM Bougy Man (bougyman) <t...@rubyists.com> wrote:

> I was trying to accomplish this on datasets and could not figure out the
> magic. Using Model.with(:enqueued, Model.where(status:
> 'ready').returning.update(status: 'processing')) does not work as expected
> in this case.
>
> Here's what I'm trying to replicate:
>
> ```with updated_notifications as (
>             update notification_events
>             set notification_event_status='PROCESSING'
>             where id IN (
>                 select id from notification_events e
>                 where notification_event_status = 'ENQUEUED'
>                 order by created_at FOR UPDATE SKIP LOCKED LIMIT 10)
>             RETURNING *)
>         select * from updated_notifications order by created_at```


This should work:

subselect_ds = DB[:notification_events].
  select(:id).
  where(notification_event_status: 'ENQUEUED').
  order(:created_at).
  for_update.
  skip_locked.
  limit(10)

update_ds = DB[:notification_events].
  where(id: subselect_ds).
  returning.
  with_sql(:update_sql, notification_event_status: 'PROCESSING')

DB[:updated_notifications].
  with(:updated_notifications, update_ds).
  order(:created_at)

Thanks,
Jeremy

-- 
You received this message because you are subscribed to the Google Groups 
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sequel-talk+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sequel-talk/CADGZSSchvKP1L4tMfxsjyx%3DL45vNmHjQexnQFjySu8HJyX3KZA%40mail.gmail.com.
  • Queueing CTE Bougy Man (bougyman)
    • Re: Queueing CTE Jeremy Evans

Reply via email to