aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bin/pg_dump/pg_dump.c6
-rw-r--r--src/bin/pg_dump/pg_dump.h1
-rw-r--r--src/bin/pg_dump/pg_dump_sort.c10
3 files changed, 17 insertions, 0 deletions
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 1985c7d508c..af45886ac20 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -3138,6 +3138,7 @@ getOperators(int *numOprs)
int i_oprname;
int i_oprnamespace;
int i_rolname;
+ int i_oprkind;
int i_oprcode;
/*
@@ -3153,6 +3154,7 @@ getOperators(int *numOprs)
appendPQExpBuffer(query, "SELECT tableoid, oid, oprname, "
"oprnamespace, "
"(%s oprowner) AS rolname, "
+ "oprkind, "
"oprcode::oid AS oprcode "
"FROM pg_operator",
username_subquery);
@@ -3162,6 +3164,7 @@ getOperators(int *numOprs)
appendPQExpBuffer(query, "SELECT tableoid, oid, oprname, "
"0::oid AS oprnamespace, "
"(%s oprowner) AS rolname, "
+ "oprkind, "
"oprcode::oid AS oprcode "
"FROM pg_operator",
username_subquery);
@@ -3173,6 +3176,7 @@ getOperators(int *numOprs)
"oid, oprname, "
"0::oid AS oprnamespace, "
"(%s oprowner) AS rolname, "
+ "oprkind, "
"oprcode::oid AS oprcode "
"FROM pg_operator",
username_subquery);
@@ -3191,6 +3195,7 @@ getOperators(int *numOprs)
i_oprname = PQfnumber(res, "oprname");
i_oprnamespace = PQfnumber(res, "oprnamespace");
i_rolname = PQfnumber(res, "rolname");
+ i_oprkind = PQfnumber(res, "oprkind");
i_oprcode = PQfnumber(res, "oprcode");
for (i = 0; i < ntups; i++)
@@ -3203,6 +3208,7 @@ getOperators(int *numOprs)
oprinfo[i].dobj.namespace = findNamespace(atooid(PQgetvalue(res, i, i_oprnamespace)),
oprinfo[i].dobj.catId.oid);
oprinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
+ oprinfo[i].oprkind = (PQgetvalue(res, i, i_oprkind))[0];
oprinfo[i].oprcode = atooid(PQgetvalue(res, i, i_oprcode));
/* Decide whether we want to dump it */
diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h
index 913d1022d62..11c4d371270 100644
--- a/src/bin/pg_dump/pg_dump.h
+++ b/src/bin/pg_dump/pg_dump.h
@@ -204,6 +204,7 @@ typedef struct _oprInfo
{
DumpableObject dobj;
char *rolname;
+ char oprkind;
Oid oprcode;
} OprInfo;
diff --git a/src/bin/pg_dump/pg_dump_sort.c b/src/bin/pg_dump/pg_dump_sort.c
index c605a3b7247..4d1ae94ef51 100644
--- a/src/bin/pg_dump/pg_dump_sort.c
+++ b/src/bin/pg_dump/pg_dump_sort.c
@@ -178,6 +178,16 @@ DOTypeNameCompare(const void *p1, const void *p2)
if (cmpval != 0)
return cmpval;
}
+ else if (obj1->objType == DO_OPERATOR)
+ {
+ OprInfo *oobj1 = *(OprInfo * const *) p1;
+ OprInfo *oobj2 = *(OprInfo * const *) p2;
+
+ /* oprkind is 'l', 'r', or 'b'; this sorts prefix, postfix, infix */
+ cmpval = (oobj2->oprkind - oobj1->oprkind);
+ if (cmpval != 0)
+ return cmpval;
+ }
/* Usually shouldn't get here, but if we do, sort by OID */
return oidcmp(obj1->catId.oid, obj2->catId.oid);