aboutsummaryrefslogtreecommitdiff
path: root/src/bin/pg_dump/pg_dump.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/pg_dump/pg_dump.c')
-rw-r--r--src/bin/pg_dump/pg_dump.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index d6c0f304f07..de01df421d4 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -12,7 +12,7 @@
* by PostgreSQL
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.505 2008/11/09 21:24:32 tgl Exp $
+ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.506 2008/12/04 17:51:27 petere Exp $
*
*-------------------------------------------------------------------------
*/
@@ -6733,13 +6733,15 @@ dumpFunc(Archive *fout, FuncInfo *finfo)
PQExpBuffer delqry;
PQExpBuffer asPart;
PGresult *res;
- char *funcsig;
+ char *funcsig; /* identity signature */
+ char *funcfullsig; /* full signature */
char *funcsig_tag;
int ntups;
char *proretset;
char *prosrc;
char *probin;
char *funcargs;
+ char *funciargs;
char *funcresult;
char *proallargtypes;
char *proargmodes;
@@ -6782,6 +6784,7 @@ dumpFunc(Archive *fout, FuncInfo *finfo)
appendPQExpBuffer(query,
"SELECT proretset, prosrc, probin, "
"pg_catalog.pg_get_function_arguments(oid) as funcargs, "
+ "pg_catalog.pg_get_function_identity_arguments(oid) as funciargs, "
"pg_catalog.pg_get_function_result(oid) as funcresult, "
"provolatile, proisstrict, prosecdef, "
"proconfig, procost, prorows, "
@@ -6893,6 +6896,7 @@ dumpFunc(Archive *fout, FuncInfo *finfo)
if (g_fout->remoteVersion >= 80400)
{
funcargs = PQgetvalue(res, 0, PQfnumber(res, "funcargs"));
+ funciargs = PQgetvalue(res, 0, PQfnumber(res, "funciargs"));
funcresult = PQgetvalue(res, 0, PQfnumber(res, "funcresult"));
proallargtypes = proargmodes = proargnames = NULL;
}
@@ -6901,7 +6905,7 @@ dumpFunc(Archive *fout, FuncInfo *finfo)
proallargtypes = PQgetvalue(res, 0, PQfnumber(res, "proallargtypes"));
proargmodes = PQgetvalue(res, 0, PQfnumber(res, "proargmodes"));
proargnames = PQgetvalue(res, 0, PQfnumber(res, "proargnames"));
- funcargs = funcresult = NULL;
+ funcargs = funciargs = funcresult = NULL;
}
provolatile = PQgetvalue(res, 0, PQfnumber(res, "provolatile"));
proisstrict = PQgetvalue(res, 0, PQfnumber(res, "proisstrict"));
@@ -7007,11 +7011,19 @@ dumpFunc(Archive *fout, FuncInfo *finfo)
}
}
- if (funcargs)
- funcsig = format_function_arguments(finfo, funcargs);
+ /* funcargs and funciargs are supported from 8.4 */
+ if (funciargs)
+ {
+ funcsig = format_function_arguments(finfo, funciargs);
+ funcfullsig = format_function_arguments(finfo, funcargs);
+ }
else
+ {
funcsig = format_function_arguments_old(finfo, nallargs, allargtypes,
argmodes, argnames);
+ funcfullsig = funcsig;
+ }
+
funcsig_tag = format_function_signature(finfo, false);
/*
@@ -7021,7 +7033,7 @@ dumpFunc(Archive *fout, FuncInfo *finfo)
fmtId(finfo->dobj.namespace->dobj.name),
funcsig);
- appendPQExpBuffer(q, "CREATE FUNCTION %s ", funcsig);
+ appendPQExpBuffer(q, "CREATE FUNCTION %s ", funcfullsig);
if (funcresult)
appendPQExpBuffer(q, "RETURNS %s", funcresult);
else