Re: Which SET TYPE don't actually require a rewrite - Mailing list pgsql-hackers
From | Noah Misch |
---|---|
Subject | Re: Which SET TYPE don't actually require a rewrite |
Date | |
Msg-id | 20200718025740.GA473979@rfd.leadboat.com Whole thread Raw |
In response to | Re: Which SET TYPE don't actually require a rewrite (Magnus Hagander <magnus@hagander.net>) |
Responses |
Re: Which SET TYPE don't actually require a rewrite
|
List | pgsql-hackers |
On Fri, Jul 17, 2020 at 04:08:36PM +0200, Magnus Hagander wrote: > On Fri, Jul 17, 2020 at 5:40 AM Noah Misch <noah@leadboat.com> wrote: > > On Wed, Jul 15, 2020 at 02:54:37PM +0200, Magnus Hagander wrote: > > > Our Fine Manual (TM) specifies: > > > "As an exception, when changing the type of an existing column, if the > > > USING clause does not change the column contents and the old type is > > either > > > binary coercible to the new type or an unconstrained domain over the new > > > type, a table rewrite is not needed; but any indexes on the affected > > > columns must still be rebuilt." > > > > > > First of all, how is a non-internals-expert even supposed to know what a > > > binary coercible type is? > > > > The manual defines it at <firstterm>binary coercible</firstterm>. > > The only way to actually realize that this is a <firstterm> is to look at > the source code though, right? I see italic typeface for <firstterm>. This one deserves an <indexterm>, too. (I bet many other <firstterm> uses deserve an <indexterm>.) > It's definitely not clear that one should go > look at the CREATE CAST documentation to find the definition -- certainly > not from the ALTER TABLE documentation, which I would argue is the place > where most people would go. Agreed. > > We can also for example increase the precision of numeric without a > > rewrite > > > (but not scale). Or we can change between text and varchar. And we can > > > increase the length of a varchar but not decrease it. > > > > > > Surely we can do better than this when it comes to documenting it? Even > > if > > > it's a pluggable thing so it may or may not be true of external > > > datatypes installed later, we should be able to at least be more clear > > > about the builtin types, I think? > > > > I recall reasoning that ATColumnChangeRequiresRewrite() is a DDL analog of > > query optimizer logic. The manual brings up only a minority of planner > > optimizations, and comprehensive lists of optimization preconditions are > > even > > rarer. But I don't mind if $SUBJECT documentation departs from that norm. > > I can see the argument being made for that, and certainly having been made > for it in the future. But I'd say given the very bad consequences of > getting it wrong, it's far from minor. And given the number of times I've > had to answer the question "can I make this change safely" (which usually > amounts to me trying it out to see what happens, if I hadn't done that > exact one many times before) indicates the need for a more detailed > documentation on it. Such a doc addition is fine with me. I agree with Tom that it will be prone to staleness, but I don't conclude that the potential for staleness reduces its net value below zero. Having said that, if the consequences of doc staleness are "very bad", you may consider documenting the debug1 user interface (https://postgr.es/m/20121202020736.GD13163@tornado.leadboat.com) instead of documenting the exact rules. Either way is fine with me.
pgsql-hackers by date: