Обсуждение: ALTER column TYPE varying question
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
"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