Thread: Cast text to bytea
-----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-----
-----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-----
-----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-----