* Simon Riggs (si...@2ndquadrant.com) wrote: > On 8 May 2014 20:40, Robert Haas <robertmh...@gmail.com> wrote: > > For my money, we'd be better off > > getting some kind of basic custom scan node functionality committed > > first, even if the cases where you can actually inject them into real > > plans are highly restricted. Then, we could later work on adding more > > ways to inject them in more places. > > We're past the prototyping stage and into productionising what we know > works, AFAIK. If that point is not clear, then we need to discuss that > first. > > At the moment the Custom join hook is called every time we attempt to > cost a join, with no restriction. > > I would like to highly restrict this, so that we only consider a > CustomJoin node when we have previously said one might be usable and > the user has requested this (e.g. enable_foojoin = on)
This is part of what I disagree with- I'd rather not require users to know and understand when they want to do a HashJoin vs. a MergeJoin vs. a CustomJoinTypeX. > We only consider merge joins if the join uses operators with oprcanmerge=true. > We only consider hash joins if the join uses operators with oprcanhash=true I wouldn't consider those generally "user-facing" options, and the enable_X counterparts are intended for debugging and not to be used in production environments. To the point you make in the other thread- I'm fine w/ having similar cost-based enable_X options, but I think we're doing our users a disservice if we require that they populate or update a table. Perhaps an extension needs to do that on installation, but that would need to enable everything to avoid the user having to mess around with the table. > So it seems reasonable to have a way to define/declare what is > possible and what is not. But my take is that adding a new column to > pg_operator for every CustomJoin node is probably out of the question, > hence my suggestion to list the operators we know it can work with. It does seem like there should be some work done in this area, as Tom mentioned, to avoid needing to have more columns to track how equality can be done. I do wonder just how we'd deal with this when it comes to GPUs as, presumably, the code to implement the equality for various types would have to be written in CUDA-or-whatever. > Given that everything else in Postgres is agnostic and configurable, > I'm looking to do the same here. It's certainly a neat idea, but I do have concerns (which appear to be shared by others) about just how practical it'll be and how much rework it'd take and the question about if it'd really be used in the end.. Thanks, Stephen
signature.asc
Description: Digital signature