Re: How to cast a char[] to varchar? - Mailing list pgsql-general

From Tom Lane
Subject Re: How to cast a char[] to varchar?
Date
Msg-id 10125.1010429416@sss.pgh.pa.us
Whole thread Raw
In response to Re: How to cast a char[] to varchar?  (Jon Lapham <lapham@extracta.com.br>)
List pgsql-general
Jon Lapham <lapham@extracta.com.br> writes:
> I have a column defined as "char(3)[]" which I would like to copy into a
> different column defined as "varchar(255)".

> PS: It would be fine if the things in "cat2" contained the braces and
> quotes, it does not need to be cleaned-up.

You're going to need to do a little programming.  plpgsql provides about
the simplest solution, as it will happily try to convert anything to
anything else (if it can out-convert the source value to text and then
in-convert to the destination type without error, it's happy).  So:

regression=# create function to_varchar(char[]) returns varchar as '
regression'# begin
regression'#   return $1;
regression'# end;' language 'plpgsql';
CREATE
regression=# create table foo (f1 char(3)[]);
CREATE
regression=# insert into foo values ('{"col","dep"}');
INSERT 299666 1
regression=# insert into foo values ('{"fee","fi", "fo","fum"}');
INSERT 299667 1
regression=# select f1, to_varchar(f1) from foo;
          f1           |      to_varchar
-----------------------+-----------------------
 {col,dep}             | {col,dep}
 {fee,"fi ","fo ",fum} | {fee,"fi ","fo ",fum}
(2 rows)

If you wanted to be smarter --- like, say, getting rid of the braces and
so on --- you could code the conversion routine in pltcl or plperl,
either of which provide much better text-mashing capability than plpgsql
does.  I seem to recall that pltcl supports Postgres arrays better than
either of the others do, so it might be the best bet for this
particular task.

            regards, tom lane

pgsql-general by date:

Previous
From: Darren Ferguson
Date:
Subject: Re: Restart postgres in php as nobody
Next
From: Jon Lapham
Date:
Subject: Re: How to cast a char[] to varchar?