Greetings!
 
I just discovered the existence of a couple of functions I don't
understand in one customer's PostgreSQL database:
 
-- Function: c_mode()
 
-- DROP FUNCTION c_mode();
 
CREATE OR REPLACE FUNCTION c_mode()
  RETURNS text AS
$BODY$  UPDATE pg_type SET typoutput='c_textout'    WHERE typname='SET';
 
      UPDATE pg_type SET typoutput='c_varcharout' WHERE
typname='bpchar';
 
      UPDATE pg_type SET typoutput='c_textout'    WHERE typname='bytea';
 
      UPDATE pg_type SET typoutput='c_charout'    WHERE typname='char';
 
      UPDATE pg_type SET typoutput='c_textout'    WHERE typname='text';
 
      UPDATE pg_type SET typoutput='c_textout'    WHERE
typname='unknown';
 
      UPDATE pg_type SET typoutput='c_varcharout' WHERE
typname='varchar';
 
      select 'c_mode'::text;$BODY$
  LANGUAGE 'sql' VOLATILE;
ALTER FUNCTION c_mode() OWNER TO postgres;

-- Function: pg_mode()
 
-- DROP FUNCTION pg_mode();
 
CREATE OR REPLACE FUNCTION pg_mode()
  RETURNS text AS
$BODY$  UPDATE pg_type SET typoutput='textout'    WHERE typname='SET';
 
      UPDATE pg_type SET typoutput='varcharout' WHERE typname='bpchar';
 
      UPDATE pg_type SET typoutput='textout'    WHERE typname='bytea';
 
      UPDATE pg_type SET typoutput='charout'    WHERE typname='char';
 
      UPDATE pg_type SET typoutput='textout'    WHERE typname='text';
 
      UPDATE pg_type SET typoutput='textout'    WHERE typname='unknown';
 
      UPDATE pg_type SET typoutput='varcharout' WHERE typname='varchar';
 
      select 'pg_mode'::text;$BODY$
  LANGUAGE 'sql' VOLATILE;
ALTER FUNCTION pg_mode() OWNER TO postgres;

This customer has demanded extensive modifications to their database and
our application.  I think these functions are used in encryption, since
there are several other non-standard functions in this database that are
related to encryption.
 
Our lead developer is in another state, and is naturally very
uncommunicative.  When I asked him about the c_mode() function and
expressed concern that changing pg_type records might not be a good
idea, his reply was:
 
"Ignore it,  it is a database contrib routine for string I/O.   It
doesn't change the database properties."
 
Are these functions really as innocuous as he claims?  It seems to me
that between the time c_mode() is called and the time that pg_mode() is
called, any other database access is likely to be confused.  
 
Thank you very much.
 
RobR
 

Reply via email to