Thread: Cast text to bytea

Cast text to bytea

From
Alvar Freude
Date:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

I want to change a column from text to bytea; since it seems that alter
table can't change the column type, i have to add a temporary column and
copy the data from the old one to the new, delete the old and rename the
new.


But it seems that Postgres can't cast text to bytea:

 odem=> UPDATE forum_gtree SET gid2=gid::bytea;
 ERROR:  Cannot cast type text to bytea


The same with casting only:

 odem=> SELECT 'abc'::text::bytea;
 ERROR:  Cannot cast type text to bytea
 odem=> SELECT '\000'::text::bytea;
 ERROR:  Cannot cast type text to bytea


How can I do this?

encode/decode seems to handle only bytea data:

  http://www.postgresql.org/docs/current/interactive/functions-string.html


And in http://www.postgresql.org/docs/current/static/datatype-binary.html I
also found no solution -- perhaps I missed something?


Thanks && Ciao
  Alvar


- --
** Alvar C.H. Freude -- http://alvar.a-blast.org/
**   Berufsverbot? http://odem.org/aktuelles/staatsanwalt.de.html
**   ODEM.org-Tour: http://tour.odem.org/
**   Informationsgesellschaft: http://www.wsis-koordinierungskreis.de/

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (FreeBSD)

iD8DBQE/zZ/hOndlH63J86wRAmvoAJ4jwJp5R0nrmf8FzG9O599ED/8eCgCeOO2L
RpqleJNIv5RKvorYzh5+lo4=
=7mYs
-----END PGP SIGNATURE-----


Re: Cast text to bytea

From
Alvar Freude
Date:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

- -- Alvar Freude <alvar@a-blast.org> wrote:

> But it seems that Postgres can't cast text to bytea:
>
>  odem=> UPDATE forum_gtree SET gid2=gid::bytea;
>  ERROR:  Cannot cast type text to bytea

I tryed it with DECODE:

  odem=> UPDATE forum_gtree SET gid2=(DECODE(gid::text, 'escape'));
  ERROR:  decode: Bad input string for type bytea

hmmm ...


The text columns contains values from \x01 to \xff -- everything exept the
null byte.


So, hmmm, it seems I'm faster writing a small piece of Perl to convert this
then searching a solution ... ;)


Ciao
  Alvar

- --
** Alvar C.H. Freude -- http://alvar.a-blast.org/
**   Berufsverbot? http://odem.org/aktuelles/staatsanwalt.de.html
**   ODEM.org-Tour: http://tour.odem.org/
**   Informationsgesellschaft: http://www.wsis-koordinierungskreis.de/

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (FreeBSD)

iD8DBQE/za68OndlH63J86wRAmE/AKCCaQU/YDFNv6fnri6D7I6Q74ts7QCfcqE1
S+I44j/Lx3mots/pt5EWBJE=
=LVOG
-----END PGP SIGNATURE-----


Re: Cast text to bytea: the Solution

From
Alvar Freude
Date:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

- -- Alvar Freude <alvar@a-blast.org> wrote:
>
>   odem=> UPDATE forum_gtree SET gid2=(DECODE(gid::text, 'escape'));
>   ERROR:  decode: Bad input string for type bytea

the solution is: backslashes in the text column are interpreted as escapes.
So: they must be marked escaped first. Replacing "\" with "\\" does this:

  UPDATE table SET bytea_col =
    (decode(replace(text_col, '\\', '\\\\'), 'escape'));


This seems to work and looks like there are the correct values in the new
column ...


Ciao
  Alvar

- --
** Alvar C.H. Freude -- http://alvar.a-blast.org/
**   Berufsverbot? http://odem.org/aktuelles/staatsanwalt.de.html
**   ODEM.org-Tour: http://tour.odem.org/
**   Informationsgesellschaft: http://www.wsis-koordinierungskreis.de/

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (FreeBSD)

iD8DBQE/zePPOndlH63J86wRAmEaAJ9LAWvLFwekca58BTWYYBuPgWrawACeJRjl
POrmVVWkT0+XmF7clqBtKlA=
=wH3M
-----END PGP SIGNATURE-----