Thread: Missing doc on expression format for ALTER TABLE

Missing doc on expression format for ALTER TABLE

From
Josh Berkus
Date:
Folks,

I've noticed that this statement is missing something:

(from sql-altertable.sgml):

ALTER COLUMN TYPE

 This form changes the type of a column of a table. Indexes and simple table
constraints involving the column will be automatically converted to use the
new column type by reparsing the originally supplied expression. The optional
USING clause specifies how to compute the new column value from the old; if
omitted, the default conversion is the same as an assignment cast from old
data type to new. A USING clause must be provided if there is no implicit or
assignment cast from old to new type.

... nowhere in this file (or anywhere else that I can tell) is the syntax for
the USING expression defined.

--
--Josh

Josh Berkus
Aglio Database Solutions
San Francisco

Re: Missing doc on expression format for ALTER TABLE

From
Tom Lane
Date:
Josh Berkus <josh@agliodbs.com> writes:
> ... nowhere in this file (or anywhere else that I can tell) is the syntax for
> the USING expression defined.

Hm?  It says

    ALTER [ COLUMN ] column TYPE type [ USING expression ]

Surely you're not expecting it to repeat the complete syntax for
<expression>.

            regards, tom lane

Re: Missing doc on expression format for ALTER TABLE

From
Josh Berkus
Date:
Tom,

>     ALTER [ COLUMN ] column TYPE type [ USING expression ]
>
> Surely you're not expecting it to repeat the complete syntax for
> <expression>.

Well, yes, actually.  Where in the documentation is a type conversion
expression defined?   Do we use NEW and OLD?  Or the name of the column?  Or
something else?

--
--Josh

Josh Berkus
Aglio Database Solutions
San Francisco

Re: Missing doc on expression format for ALTER TABLE

From
Alvaro Herrera
Date:
On Sun, Mar 27, 2005 at 05:11:43PM -0800, Josh Berkus wrote:

> >     ALTER [ COLUMN ] column TYPE type [ USING expression ]
> >
> > Surely you're not expecting it to repeat the complete syntax for
> > <expression>.
>
> Well, yes, actually.  Where in the documentation is a type conversion
> expression defined?   Do we use NEW and OLD?  Or the name of the column?  Or
> something else?

I think the ALTER TABLE page is in dire need of a "See also" section, at
least.  And a reference to where <expression> is defined would be nice
to have.

--
Alvaro Herrera (<alvherre[@]dcc.uchile.cl>)
"All rings of power are equal,
But some rings of power are more equal than others."
                                 (George Orwell's The Lord of the Rings)

Re: Missing doc on expression format for ALTER TABLE

From
Josh Berkus
Date:
Guys,

> > Well, yes, actually.  Where in the documentation is a type conversion
> > expression defined?   Do we use NEW and OLD?  Or the name of the column?
> > Or something else?
>
> I think the ALTER TABLE page is in dire need of a "See also" section, at
> least.  And a reference to where <expression> is defined would be nice
> to have.

What I'm pointing out here is that the USING clause can't be just ANY
expression, it needs to be a specific type of expression.   And the docs
don't explain what kind of expression is usable here.   Even a single example
would go a long way ...

--
Josh Berkus
Aglio Database Solutions
San Francisco

Re: Missing doc on expression format for ALTER TABLE

From
David Fetter
Date:
On Sun, Mar 27, 2005 at 09:50:47PM -0800, Josh Berkus wrote:
> Guys,
>
> > > Well, yes, actually.  Where in the documentation is a type
> > > conversion expression defined?   Do we use NEW and OLD?  Or the
> > > name of the column?  Or something else?
> >
> > I think the ALTER TABLE page is in dire need of a "See also"
> > section, at least.  And a reference to where <expression> is
> > defined would be nice to have.
>
> What I'm pointing out here is that the USING clause can't be just
> ANY expression, it needs to be a specific type of expression.   And
> the docs don't explain what kind of expression is usable here.
> Even a single example would go a long way ...

I sent a patch in awhile ago that added this:

"To change an integer column containing UNIX timestamps to timestamp
with time zone via a USING clause:

ALTER TABLE foo
    ALTER COLUMN foo_timestamp TYPE timestamp with time zone
    USING
        timestamp with time zone 'epoch' + foo_timestamp * interval '1 second';
"

That is at least something, although I agree that more examples of the
exact kind of expression would be a very good thing.

Cheers,
D
--
David Fetter david@fetter.org http://fetter.org/
phone: +1 510 893 6100   mobile: +1 415 235 3778

Remember to vote!