Thread
-
Concatenating bytea types...
Marko Rihtar <rihtar.marko@gmail.com> — 2013-02-28T10:21:04Z
Hi all, i have a little problem. I'm trying to rewrite one procedure from mysql that involves bytes concatenation. This is my snippet from postgres code: ... cv1 bytea; ... cv1 := E'\\000'::bytea; ... cv1 := CONCAT(cv1, DECODE(TO_HEX(11), 'escape')); ... this third line throws following error: invalid hexadecimal digit: "\" I run it through the debugger and saw that after assigning the zero byte value to cv1 variable, postgres automatically converts it to \x00. And then inside CONCAT it brakes with above error. Inside select it works fine select CONCAT(E'\\000'::bytea, DECODE(TO_HEX(11), 'escape')) select CONCAT('\x00'::bytea, DECODE(TO_HEX(11), 'escape')) Is there a way to solve this somehow? thanks for help, Marko -
Re: Concatenating bytea types...
Richard Huxton <dev@archonet.com> — 2013-03-01T14:32:07Z
On 28/02/13 10:21, Marko Rihtar wrote: > Hi all, > > i have a little problem. > I'm trying to rewrite one procedure from mysql that involves bytes > concatenation. > This is my snippet from postgres code: You seem to be mixing up escape and hex literal formatting along with decode(). The following should help. BEGIN; CREATE FUNCTION to_hex_pair(int) RETURNS text AS $$ SELECT right('0' || to_hex($1), 2); $$ LANGUAGE sql; CREATE FUNCTION f_concat_bytea1(bytea, bytea) RETURNS text AS $$ BEGIN RETURN $1 || $2; END; $$ LANGUAGE plpgsql; CREATE FUNCTION f_concat_bytea2(bytea, bytea) RETURNS bytea AS $$ DECLARE cv1 bytea; BEGIN cv1 := '\x01'::bytea; RETURN $1 || cv1 || $2; END; $$ LANGUAGE plpgsql; CREATE FUNCTION f_concat_bytea3(text, text) RETURNS bytea AS $$ DECLARE cv1 text; BEGIN cv1 := '01'; RETURN decode($1 || cv1 || $2, 'hex'); END; $$ LANGUAGE plpgsql; SELECT '\x000b'::bytea AS want_this, decode('000b','hex') AS or_this1, decode('\000\013','escape') AS or_this2; SELECT f_concat_bytea1('\x00', '\x0b'); SELECT f_concat_bytea2('\x00', '\x0b'); SELECT f_concat_bytea3('00', '0b'); ROLLBACK; -- Richard Huxton Archonet Ltd -
Re: Concatenating bytea types...
Jasen Betts <jasen@xnet.co.nz> — 2013-03-02T05:07:58Z
On 2013-02-28, Marko Rihtar <rihtar.marko@gmail.com> wrote: > --047d7b603fca8e330f04d6c63f7b > Content-Type: text/plain; charset=ISO-8859-1 > > Hi all, > > i have a little problem. > cv1 := CONCAT(cv1, DECODE(TO_HEX(11), 'escape')); what's that supposed to do? if I were to fix it how would I know? -- ⚂⚃ 100% natural