Обсуждение: 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-----