ALTER column TYPE varying question

Started by Paolo Negriabout 19 years ago2 messagesgeneral
Jump to latest
#1Paolo Negri
hungrylist@gmail.com

I need to increase the length of a string field using version 8.1
I was thinking to use ALTER TABLE since now altering a column type
should be supported by pg.
The column is currently varying(60) and I want to have it varying(120)

After executing

ALTER TABLE mytable ALTER COLUMN mycolumn TYPE varchar(120)

I can see the column definition correctly changes and I can insert
rows with longer data in mycolumn.
But when I try to update data which were in the table before the ALTER
TABLE I get

"ERROR: value too long for type character varying(60)"

It's like the old rows didn't update correctly keeping the old maximum length.

I can see there's an optional USING clause for the ALTER TYPE, but is
not really clear to me what should i add in this case, since basically
I'd need no convertion...

Thanks

Paolo

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Paolo Negri (#1)
Re: ALTER column TYPE varying question

"Paolo Negri" <hungrylist@gmail.com> writes:

I need to increase the length of a string field using version 8.1

8.1.what?

After executing
ALTER TABLE mytable ALTER COLUMN mycolumn TYPE varchar(120)
I can see the column definition correctly changes and I can insert
rows with longer data in mycolumn.
But when I try to update data which were in the table before the ALTER
TABLE I get
"ERROR: value too long for type character varying(60)"

Please provide a self-contained test case. It works in simple cases:

regression=# create table mytable (mycolumn varchar(60));
CREATE TABLE
regression=# insert into mytable values ('foo');
INSERT 0 1
regression=# ALTER TABLE mytable ALTER COLUMN mycolumn TYPE varchar(120);
ALTER TABLE
regression=# update mytable set mycolumn = repeat('x',100);
UPDATE 1
regression=#

It sounds like you have a case where the old table definition is still
reflected in a cached plan ...

regards, tom lane