5.106.0.txt

doc/release_notes/5.106.0.txt

New Features

  • Dataset#for_portion_of has been added on PostgreSQL to support the UPDATE/DELETE FOR PORTION OF clause added in PostgreSQL 19. This allows for updating a portion of the dataset. It can update multiple rows and potentially split existing rows.

    There are two ways to call it, one by providing the range itself:

    DB[:t].for_portion_of(:rc, Sequel.function(:int4range, 1, 2)).
      update(c: 3)
    # UPDATE t FOR PORTION OF rc (int4range(1, 2)) SET c = 3
    

    And one by providing the inclusive start and exclusive end of the range:

    DB[:t].for_portion_of(:rc, 1, 2).update(c: 3)
    # UPDATE t FOR PORTION OF rc FROM 1 TO 2 SET c = 3
    

    This support is typically used with temporal data (date and timestamp ranges), though as shown above, it works on other range types as well.

  • Sequel::Constants::ALL has been added to allow you to use the GROUP BY ALL clause supported in PostgreSQL 19, which groups on all non-aggregate expressions:

    DB[:t].select(:c1, :c2){sum(:c3)}.group(Sequel::ALL)
    # SELECT c1, c2, sum(c3) FROM t GROUP BY ALL
    
  • The :ignore_nulls window function option is now supported on PostgreSQL 19+. This allows the use of the IGNORE NULLS clause:

    DB[:t].select do
      first_value(:i).
        over(frame: :all, ignore_nulls: true, order: :i)
    end
    # SELECT first_value(i) IGNORE NULLS OVER (
    #   ORDER BY i
    #   ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
    # )
    # FROM t
    

    Note that only a subset of window functions support this clause.