Thread: convert char to varchar
Hi all, is it possible to convert character fields to character varying using pg_dump/pg_restore? this is my case: I have a table with character fields: CREATE TABLE c1 (name char(20), date char(20)); INSERT INTO c1 VALUES ('a',a'); INSERT INTO c1 VALUES ('b',b'); and another table with character varying fields: CREATE TABLE v1 (name varchar(20), date varchar(20)); when I dump c1 and restore it to v1 my selections on v1 are failed because the data on v1 table contains trailing spaces. SELECT * FROM v1 WHERE name ='a'; (failed) if I alter types on v1 to character and then back to character varying the trailing spaces disappears and the above selection is ok. Is there any other way to clear trailing spaces when I restore the table? regards, kostis.
On 10/18/07, Kostis Mentzelos <mentzelos@gmx.net> wrote: > Is there any other way to clear trailing spaces when I restore the table? After you restore, you can do: UPDATE V1 SET NAME = TRIM(TRAILING ' ' FROM NAME) , DATE = TRIM(TRAILING ' ' FROM DATE);
> Is there any other way to clear trailing spaces when I restore the table? If you're running 8.x, you can do this in place: ALTER TABLE c1 ALTER COLUMN name varchar(20) USING rtrim(name), ALTER COLUMN date varchar(20) USING rtrim(date); This could take a long time if the table is large or has a lot of indexes on it. Peter
On 10/18/07, Peter Koczan <pjkoczan@gmail.com> wrote: > > Is there any other way to clear trailing spaces when I restore the table? > > If you're running 8.x, you can do this in place: > > ALTER TABLE c1 ALTER COLUMN name varchar(20) USING rtrim(name), ALTER > COLUMN date varchar(20) USING rtrim(date); > > This could take a long time if the table is large or has a lot of indexes on it. Oops. The command should be: ALTER TABLE c1 ALTER COLUMN name TYPE varchar(20) USING rtrim(name), ALTER COLUMN date TYPE varchar(20) USING rtrim(date); I forgot the TYPE keyword...it's important. Peter