Re: Document efficient self-joins / UPDATE LIMIT techniques.

Joel Jacobson <joel@compiler.org>

From: "Joel Jacobson" <joel@compiler.org>
To: "Corey Huinker" <corey.huinker@gmail.com>
Cc: "Laurenz Albe" <laurenz.albe@cybertec.at>, "vignesh C" <vignesh21@gmail.com>, pgsql-hackers@lists.postgresql.org, "Marko Tiikkaja" <marko@joh.to>
Date: 2024-02-14T16:55:07Z
Lists: pgsql-hackers
On Tue, Feb 13, 2024, at 23:56, Corey Huinker wrote:
> This patch came out of a discussion at the last PgCon with the person 
> who made the "fringe feature" quote, who seemed quite supportive of 
> documenting the technique. The comment may have been in regards to 
> actually implementing a LIMIT clause on UPDATE and DELETE, which isn't 
> in the SQL standard and would be difficult to implement as the two 
> statements have no concept of ordering. Documenting the workaround 
> would alleviate some interest in implementing a nonstandard feature.

Thanks for sharing the background story.

> As for whether it's commonplace, when I was a consultant I had a number 
> of customers that I had who bemoaned how large updates caused big 
> replica lag, basically punishing access to records they did care about 
> in order to properly archive or backfill records they don't care about. 
> I used the technique a lot, putting the update/delete in a loop, and 
> often running multiple copies of the same script at times when I/O 
> contention was low, but if load levels rose it was trivial to just kill 
> a few of the scripts until things calmed down.

I've also used the technique quite a lot, but only using the PK,
didn't know about the ctid trick, so many thanks for documenting it.

/Joel



Commits

  1. Doc: show how to get the equivalent of LIMIT for UPDATE/DELETE.