Thread: dump of functions does not handle backslashes correctly
If you create a function from psql like: CREATE FUNCTION "plpgsql_call_handler" ( ) RETURNS opaque AS '/usr/local/pgsql/lib/plpgsql.so' LANGUAGE 'C'; CREATE TRUSTED PROCEDURAL LANGUAGE 'plpgsql' HANDLER "plpgsql_call_handler" LANCOMPILER 'PL/pgSQL'; CREATE FUNCTION "atestfun" ( ) RETURNS text AS 'DECLARE mtt TEXT; BEGIN mtt := ''This is a \\\\ test.''; RETURN mtt; END;' LANGUAGE 'plpgsql'; Then use pg_dump on it, you get: CREATE FUNCTION "plpgsql_call_handler" ( ) RETURNS opaque AS '/usr/local/pgsql/lib/plpgsql.so' LANGUAGE 'C'; CREATE TRUSTED PROCEDURAL LANGUAGE 'plpgsql' HANDLER "plpgsql_call_handler" LANCOMPILER 'PL/pgSQL'; CREATE FUNCTION "atestfun" ( ) RETURNS text AS 'DECLARE mtt TEXT; BEGIN mtt := ''This is a \\ test.''; RETURN mtt; END;' LANGUAGE 'plpgsql'; In the function, the variable "mtt" loses half of the '\' characters. When you reload this dump, the embedded '\' is lost. When you do a SELECT atestfun(); The ouput should be: atestfun ------------------ This is a \ test. (1 row) But instead, it returns: atestfun ------------------ This is a test. (1 row) Is this a pg_dump bug or is there there some way to do this right? -- -------- Robert B. Easter reaster@comptechnews.com --------- - CompTechNews Message Board http://www.comptechnews.com/ - - CompTechServ Tech Services http://www.comptechserv.com/ - ---------- http://www.comptechnews.com/~reaster/ ------------
"Robert B. Easter" <reaster@comptechnews.com> writes: > Is this a pg_dump bug or is there there some way to do this right? It's a pg_dump bug --- pg_dump knows how to quote special characters in string literals, but failed to do so for function bodies (and a number of other places too). I've committed a fix. regards, tom lane