Missing doc on expression format for ALTER TABLE

Started by Josh Berkusabout 21 years ago6 messagesdocs
Jump to latest
#1Josh Berkus
josh@agliodbs.com

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

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Josh Berkus (#1)
Re: Missing doc on expression format for ALTER TABLE

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

#3Josh Berkus
josh@agliodbs.com
In reply to: Tom Lane (#2)
Re: Missing doc on expression format for ALTER TABLE

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

#4Alvaro Herrera
alvherre@dcc.uchile.cl
In reply to: Josh Berkus (#3)
Re: Missing doc on expression format for ALTER TABLE

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)

#5Josh Berkus
josh@agliodbs.com
In reply to: Alvaro Herrera (#4)
Re: Missing doc on expression format for ALTER TABLE

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

#6David Fetter
david@fetter.org
In reply to: Josh Berkus (#5)
Re: Missing doc on expression format for ALTER TABLE

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!