Thread

  1. dump of functions does not handle backslashes correctly

    Robert B. Easter <reaster@comptechnews.com> — 2000-12-01T17:19:28Z

    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/ ------------
    
    
  2. Re: dump of functions does not handle backslashes correctly

    Tom Lane <tgl@sss.pgh.pa.us> — 2001-01-04T03:03:20Z

    "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