Thread: TID: <> operator
Attached is a patch that implements <> for the tid type. This is based on a patch submitted by Mark Kirkwood in October of 2005. I added some regression tests, avoided unnecessarily renumbering a few OIDs in the system catalogs, and bumped the catversion. Barring any objections I'll apply this tomorrow. -Neil
Attachment
On Sat, 2006-02-25 at 22:00 -0500, Neil Conway wrote: > Attached is a patch that implements <> for the tid type. This is based > on a patch submitted by Mark Kirkwood in October of 2005. I added some > regression tests, avoided unnecessarily renumbering a few OIDs in the > system catalogs, and bumped the catversion. Applied. -Neil
"Neil Conway" <neilc@samurai.com> wrote > Attached is a patch that implements <> for the tid type. This is based > on a patch submitted by Mark Kirkwood in October of 2005. I added some > regression tests, avoided unnecessarily renumbering a few OIDs in the > system catalogs, and bumped the catversion. > Does it make sense to implementation > or < for the tid type? I will see it as a "kinda" alternative for LIMIT clause. Regards, Qingqing
On Mon, 2006-02-27 at 11:37 +0800, Qingqing Zhou wrote: > Does it make sense to implementation > or < for the tid type? I can't get too excited about it, but I wouldn't object if someone can see a use for it. -Neil
"Neil Conway" <neilc@samurai.com> wrote > > Does it make sense to implementation > or < for the tid type? > > I can't get too excited about it, but I wouldn't object if someone can > see a use for it. > There might be another usage of tid < or >. Consider a heap with one middle page is broken, I could save most of my data by doing INSERT INTO aa SELECT * FROM a WHERE ctid < '(1000, 1)'; INSERT INTO aa SELECT * FROM a WHERE ctid > '(1001, 0)'; The above example also proves that <= or >= is not required. Regards, Qingqing
"Qingqing Zhou" <zhouqq@cs.toronto.edu> writes: > There might be another usage of tid < or >. Consider a heap with one middle > page is broken, I could save most of my data by doing > INSERT INTO aa SELECT * FROM a WHERE ctid < '(1000, 1)'; > INSERT INTO aa SELECT * FROM a WHERE ctid > '(1001, 0)'; Well, not really, because the planner won't optimize that, hence will try to apply the WHERE condition to each row of the table, hence you'll still bomb on the bad page. > The above example also proves that <= or >= is not required. <> is "not required" either since NOT (foo = bar) serves perfectly well. If we're going to do this I'd vote for putting in all four operators just to minimize the surprise factor. But I'm not sold that there's a use case, any more than Neil is. regards, tom lane