diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
new file mode 100644
index 458a118..fd0bf4d
*** a/src/bin/pg_dump/pg_dump.c
--- b/src/bin/pg_dump/pg_dump.c
*************** dumpFunc(Archive *fout, FuncInfo *finfo)
*** 9608,9614 ****
  	PQExpBuffer asPart;
  	PGresult   *res;
  	char	   *funcsig;		/* identity signature */
! 	char	   *funcfullsig;	/* full signature */
  	char	   *funcsig_tag;
  	char	   *proretset;
  	char	   *prosrc;
--- 9608,9614 ----
  	PQExpBuffer asPart;
  	PGresult   *res;
  	char	   *funcsig;		/* identity signature */
! 	char	   *funcfullsig = NULL;	/* full signature */
  	char	   *funcsig_tag;
  	char	   *proretset;
  	char	   *prosrc;
*************** dumpFunc(Archive *fout, FuncInfo *finfo)
*** 9916,9928 ****
  		funcsig = format_function_arguments(finfo, funciargs, false);
  	}
  	else
- 	{
  		/* pre-8.4, do it ourselves */
  		funcsig = format_function_arguments_old(fout,
  												finfo, nallargs, allargtypes,
  												argmodes, argnames);
- 		funcfullsig = funcsig;
- 	}
  
  	funcsig_tag = format_function_signature(fout, finfo, false);
  
--- 9916,9925 ----
*************** dumpFunc(Archive *fout, FuncInfo *finfo)
*** 9933,9939 ****
  					  fmtId(finfo->dobj.namespace->dobj.name),
  					  funcsig);
  
! 	appendPQExpBuffer(q, "CREATE FUNCTION %s ", funcfullsig);
  	if (funcresult)
  		appendPQExpBuffer(q, "RETURNS %s", funcresult);
  	else
--- 9930,9937 ----
  					  fmtId(finfo->dobj.namespace->dobj.name),
  					  funcsig);
  
! 	appendPQExpBuffer(q, "CREATE FUNCTION %s ", funcfullsig ? funcfullsig :
! 					  funcsig);
  	if (funcresult)
  		appendPQExpBuffer(q, "RETURNS %s", funcresult);
  	else
*************** dumpFunc(Archive *fout, FuncInfo *finfo)
*** 10056,10061 ****
--- 10054,10061 ----
  	destroyPQExpBuffer(labelq);
  	destroyPQExpBuffer(asPart);
  	free(funcsig);
+ 	if (funcfullsig)
+ 		free(funcfullsig);
  	free(funcsig_tag);
  	if (allargtypes)
  		free(allargtypes);
*************** dumpAgg(Archive *fout, AggInfo *agginfo)
*** 11512,11518 ****
  	PQExpBuffer labelq;
  	PQExpBuffer details;
  	char	   *aggsig;			/* identity signature */
! 	char	   *aggfullsig;		/* full signature */
  	char	   *aggsig_tag;
  	PGresult   *res;
  	int			i_aggtransfn;
--- 11512,11518 ----
  	PQExpBuffer labelq;
  	PQExpBuffer details;
  	char	   *aggsig;			/* identity signature */
! 	char	   *aggfullsig = NULL;		/* full signature */
  	char	   *aggsig_tag;
  	PGresult   *res;
  	int			i_aggtransfn;
*************** dumpAgg(Archive *fout, AggInfo *agginfo)
*** 11660,11670 ****
  		aggsig = format_function_arguments(&agginfo->aggfn, funciargs, true);
  	}
  	else
- 	{
  		/* pre-8.4, do it ourselves */
  		aggsig = format_aggregate_signature(agginfo, fout, true);
- 		aggfullsig = aggsig;
- 	}
  
  	aggsig_tag = format_aggregate_signature(agginfo, fout, false);
  
--- 11660,11667 ----
*************** dumpAgg(Archive *fout, AggInfo *agginfo)
*** 11734,11740 ****
  					  aggsig);
  
  	appendPQExpBuffer(q, "CREATE AGGREGATE %s (\n%s\n);\n",
! 					  aggfullsig, details->data);
  
  	appendPQExpBuffer(labelq, "AGGREGATE %s", aggsig);
  
--- 11731,11737 ----
  					  aggsig);
  
  	appendPQExpBuffer(q, "CREATE AGGREGATE %s (\n%s\n);\n",
! 					  aggfullsig ? aggfullsig : aggsig, details->data);
  
  	appendPQExpBuffer(labelq, "AGGREGATE %s", aggsig);
  
*************** dumpAgg(Archive *fout, AggInfo *agginfo)
*** 11777,11782 ****
--- 11774,11781 ----
  			agginfo->aggfn.rolname, agginfo->aggfn.proacl);
  
  	free(aggsig);
+ 	if (aggfullsig)
+ 		free(aggfullsig);
  	free(aggsig_tag);
  
  	PQclear(res);
